pythonpython-3.xcurly-bracesf-string

How to escape curly-brackets in f-strings?


I have a string in which I would like curly-brackets, but also take advantage of the f-strings feature. Is there some syntax that works for this?

Here are two ways it does not work. I would like to include the literal text {bar} as part of the string.

foo = "test"
fstring = f"{foo} {bar}"

NameError: name 'bar' is not defined

fstring = f"{foo} \{bar\}"

SyntaxError: f-string expression part cannot include a backslash

Desired result:

'test {bar}'

Edit: Looks like this question has the same answer as How can I print literal curly-brace characters in a string and also use .format on it?, but you can only know that if you know that str.format uses the same rules as the f-string. So hopefully this question has value in tying f-string searchers to this answer.


Solution

  • Although there is a custom syntax error from the parser, the same trick works as for calling .format on regular strings.

    Use double curlies:

    >>> foo = 'test'
    >>> f'{foo} {{bar}}'
    'test {bar}'
    

    To embed a value within braces, you can use triple-braces.

    >>> foo = 'test'
    >>> f'{{{foo}}}'
    '{test}'
    

    It's mentioned in the spec here and the docs here.