Issue 30955: \N in f-string causes next { to be literal if not escaped (original) (raw)
Take this format python code:
import unicodedata
c = chr(0x012345)
To print that character as a string literal, you would expect to do:
print(f"'\\N{{{unicodedata.name(c)}}}'")
Which should print a literal quote ('
), a backwards slash (\\
-> \
), an N
, and the two {{
should escape and print {
, followed by the f-expression unicodedata.name(c)
, then the }}
would print one }
, and then another literal quote ('
).
However, this raises a SyntaxError: f-string: single '}' is not allowed
. The way to do this without a syntax error is like so:
print(f"'\\N{{unicodedata.name(c)}}}'")
Which prints the expected:
'\N{CUNEIFORM SIGN URU TIMES KI}'
The shortest way to reproduce this is:
f'\\N{'
Which works, and:
f'\\N{{'
which raises an error, even though the first one should raise an error (SyntaxError: f-string: expecting '}'
).