Search code examples
pythonstring-formattingpython-internals

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


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

Solution

  • 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.