[Python-ideas] Let’s make escaping in f-literals impossible

Eric V. Smith eric at trueblade.com
Mon Aug 29 17:12:59 EDT 2016


On 8/23/2016 8:18 AM, Nick Coghlan wrote:
> On 21 August 2016 at 03:32, Eric V. Smith <eric at trueblade.com> wrote:
>> If anything, I'd make it an error to have any backslashes inside the
>> brackets of an f-string for 3.6. We could always remove this restriction at
>> a later date.
>
> +1 for this if you can find a way to do it - it eliminates the
> problematic cases where the order of evaluation makes a difference,
> and ensures the parts within the braces can be reliably processed as
> normal Python code.

I've been looking at this, and I agree it's the best thing to do, for 
now (and possibly forever).

I'm just not convinced I can get it done before alpha 1. Assuming I can 
get the coding done, I think I should update PEP 498 to say there can be 
no backslashes inside the curly braces. That's my preferred outcome.

If I can't get it done by alpha 1, then I think the options are:
1. Leave f-strings as they are now, and that's how they'll always be.
2. Leave f-strings as they are now, but mark them as provisional and
    warn people that the backslash restrictions will show up in an
    upcoming release.
3. Disallow any backslashes anywhere in f-strings for 3.6, and relax the
    restriction in 3.7 to make it only inside braces where the
    restriction is enforced.
4. Remove f-strings from 3.6, and add them in 3.7 with the "no backslash
    inside braces" restriction.

I'm not wild about 2: people will ignore this and will write code that 
will break in 3.7. I'm also not wild about 3, since it's too restrictive.

I'm open to suggestions.

Eric.



More information about the Python-ideas mailing list