[Python-ideas] Briefer string format

Xavier Combelle xavier.combelle at gmail.com
Sun Aug 2 21:12:21 CEST 2015


You could disambiguate with parenthesis like this f'expr={({x: y for x, y
in [(1, 2), (3, 4)]})}'

2015-08-02 18:00 GMT+02:00 Eric V. Smith <eric at trueblade.com>:

>
>
> Eric.
>
> On 8/2/2015 11:57 AM, MRAB wrote:
> > On 2015-08-02 16:37, Eric V. Smith wrote:
> >> On 8/1/2015 1:43 PM, Eric V. Smith wrote:
> >>> On 7/25/2015 3:55 PM, Eric V. Smith wrote:
> >>>> In trying to understand the issues for a PEP, I'm working on a sample
> >>>> implementation. There, I've just disallowed concatentation entirely.
> >>>> Compared to all of the other issues, it's really insignificant. I'll
> >>>> put
> >>>> it back at some point.
> >>>
> >>> I'm basically done with my implementation of f-strings.
> >>
> >> Here's another issue. I can't imagine this will happen often, but it
> >> should be addressed. It has to do with literal expressions that begin
> >> with a left brace.
> >>
> >> For example, this expression:
> >>>>> {x: y for x, y in [(1, 2), (3, 4)]}
> >> {1: 2, 3: 4}
> >>
> >> If you want to put it in an f-string, you'd naively write:
> >>
> >>>>> f'expr={{x: y for x, y in [(1, 2), (3, 4)]}}'
> >> 'expr={x: y for x, y in [(1, 2), (3, 4)]}'
> >>
> >> But as you see, this won't work because the doubled '{' and '}' chars
> >> are just interpreted as escaped braces, and the result is an
> >> uninterpreted string literal, with the doubled braces replaced by
> >> undoubled ones.
> >>
> >> There's currently no way around this. You could try putting a space
> >> between the left braces, but that fails with IndentationError:
> >>
> >>>>> f'expr={ {x: y for x, y in [(1, 2), (3, 4)]}}'
> >>    File "<fstring>", line 1
> >>      {x: y for x, y in [(1, 2), (3, 4)]}
> >>      ^
> >> IndentationError: unexpected indent
> >>
> > Why is there an IndentationError? It's an expression, not a statement,
> > so leading spaces should be ignored.
>
> Good question. I'm parsing it with PyParser_ASTFromString. Maybe I'm
> missing a compiler flag there which will ignore leading spaces.
>
> But in any event, the result is the same: You'll need to add a space
> here in order to disambiguate it from doubled braces. That's really the
> crux of the issue.
>
> Eric.
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20150802/ca286a56/attachment-0001.html>


More information about the Python-ideas mailing list