← Back to all TILs

Escape Curly Braces Within Formatted String

python Written August 20, 2026

Python's f-string allows you to interpolate values into a string literal like so:

>>> amount = 25
>>> print(f"Price: ${amount}")
Price: $25

The { and } are betting special treatment when f precedes the string literal. So, what if the resulting string is supposed to have literal { and } characters in it?

>>> f"JSON opens and closes with curlies: {...}"
'JSON opens and closes with curlies: Ellipsis'

I need a way of escaping them. The trick is to double them up.

>>> f"JSON opens and closes with curlies: {{...}}"
'JSON opens and closes with curlies: {...}'

A more practical example of where this is useful is in formatting an expected string of JSON in a test:

info_result = runner.invoke(cli, ["info", "--json"])
output = textwrap.dedent(f"""
{{
    "config_file": "{config_file}",
    "data_dir": "{data_dir}",
    "version": "{VMT_VERSION}",
    "schema_version": 1
}}
""").strip()
assert output in info_result.output

I'm doing some interpolation at various points in the string literal, but the outer curly braces are meant to be literal, the opening and closing of the JSON object.

Other posts like this