Skip to content

Latest commit

 

History

History
47 lines (38 loc) · 1.25 KB

File metadata and controls

47 lines (38 loc) · 1.25 KB

Escape Curly Braces Within Formatted String

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.