Why are double curly braces used instead of backslash in python f-strings?

Question:

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
Asked By: fizzybear

||

Answers:

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.

Answered By: jsmart

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.

Answered By: user2357112