[Python-Dev] Changes to PEP 498 (f-strings)

Eric V. Smith eric at trueblade.com
Tue Aug 30 13:55:07 EDT 2016

After a long discussion on python-ideas (starting at
I'm proposing the following change to PEP 498: backslashes inside
brackets will be disallowed. The point of this is to disallow convoluted
code like:

>>> d = {'a': 4}
>>> f'{d[\'a\']}'

In addition, I'll disallow escapes to be used for brackets, as in:

>>> f'\x7bd["a"]}'

(where chr(0x7b) ==  "{").

Because we're so close to 3.6 beta 1, my plan is to:

1. Modify the PEP to reflect these restrictions.
2. Modify the code to prevent _any_ backslashes inside f-strings.

This is a more restrictive change than the PEP will describe, but it's
much easier to implement. After beta 1, and hopefully before beta 2, I
will implement the restrictions as I've outlined above (and as they will
be documented in the PEP). The net effects are:

a. Some code that works in the alphas won't work in beta 1. I'll
document this.
b. All code that's valid in beta 1 will work in beta 2, and some
f-strings that are syntax errors in beta 1 will work in beta 2.

I've discussed this issue with Ned and Guido, who are okay with these

The python-ideas thread I referenced above has some discussion about
further changes to f-strings. Those proposals are outside the scope of
3.6, but the changes I'm putting forth here will allow for those
additional changes, should we decide to make them. That's a discussion
for 3.7, however.

I'm sending this email out just to notify people of this upcoming
change. I hope this won't generate much discussion. If you feel the need
to discuss this issue further, please use the python-ideas thread (where
some people are already ignoring it!).


More information about the Python-Dev mailing list