6

We usually use the backslash to escape illegal characters.

For example, escaping the double quotes.

>>> "\"" == '"'
True

In f-strings, curly braces are used for placeholding. To represent a curly brace, the braces are doubled.

For example,

>>> f"{{}}" == "{}"
True

Why was this intuitive approach not favored when developing f-strings? Is there some technical or design reason?

>>> f'\{\}'
  File "<stdin>", line 1
SyntaxError: f-string expression part cannot include a backslash
4

2 Answers 2

3

I believe that PEP 536 (Final Grammar for Literal String Interpolation) speaks to this point: https://www.python.org/dev/peps/pep-0536/

A short snippet from the Motivation section of the PEP is "The current implementation of f-strings in CPython relies on the existing string parsing machinery and a post processing of its tokens. This results in several restrictions to the possible expressions usable within f-strings: "

For additional information refer to this linked email.

Sign up to request clarification or add additional context in comments.

4 Comments

Wow, this is really great. Thanks for pointing me to these resources!
PEP 536 is unaccepted and unimplemented, though. The changes proposed in it have not been made.
@EdekiOkoh: That's about a completely different use of backslashes that got rejected, though. I'm not aware of a discussion regarding the use of \{ to escape braces.
3

jsmart's answer sounds nice, but the existing f-string implementation could fairly easily have been written to use \{ and \} instead of {{ and }}. The limitations PEP 536 would have addressed are different, like the inability to use ' inside an expression portion of an f-string if ' was used to delimit the f-string itself.

It's more likely that f-strings use {{ and }} not because \{ and \} would have been hard to implement, but because str.format was already using {{ and }} to represent literal braces when f-strings were introduced, and the f-string syntax was based on str.format's syntax. Using {{ and }} makes it easier to transition between str.format and f-strings. There was no compelling reason to change the existing notation.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.