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

Guido van Rossum guido at python.org
Sat Sep 10 00:02:06 EDT 2016


Very happy to hear it. It's almost like you were present at the sprint!

On Fri, Sep 9, 2016 at 7:04 PM, Eric V. Smith <eric at trueblade.com> wrote:
> I found some time before beta 1 to modify the f-string code to implement the
> desired behavior: no backslashes inside the curly braces, but they're
> allowed in the literal string portions. I just checked it in.
>
> I still need to update PEP 498, and the documentation needs updating. I'll
> create an issue for the docs once I've updated the PEP.
>
> This is a fairly large change, because now I need to parse the f-strings in
> UTF-8, and do the decoding myself in pieces, instead of the previous
> behavior of decoding the string first and then parsing it.
>
> I think I have tests for all of the backslash scenarios, but I'll watch the
> buildbots.
>
> Eric.
>
>
> On 8/30/2016 1:55 PM, Eric V. Smith wrote:
>>
>> After a long discussion on python-ideas (starting at
>> https://mail.python.org/pipermail/python-ideas/2016-August/041727.html)
>> 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\']}'
>>
>> '4'
>>
>> In addition, I'll disallow escapes to be used for brackets, as in:
>>
>>>>> f'\x7bd["a"]}'
>>
>> '4'
>>
>> (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
>> changes.
>>
>> 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!).
>>
>> Eric.
>> _______________________________________________
>> Python-Dev mailing list
>> Python-Dev at python.org
>> https://mail.python.org/mailman/listinfo/python-dev
>> Unsubscribe:
>> https://mail.python.org/mailman/options/python-dev/eric%2Ba-python-dev%40trueblade.com
>>
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> https://mail.python.org/mailman/options/python-dev/guido%40python.org



-- 
--Guido van Rossum (python.org/~guido)


More information about the Python-Dev mailing list