[Python-Dev] PEP 498: Literal String Interpolation is ready for pronouncement (original) (raw)
Eric V. Smith eric at trueblade.com
Sat Sep 5 19:39:23 CEST 2015
- Previous message (by thread): [Python-Dev] PEP 498: Literal String Interpolation is ready for pronouncement
- Next message (by thread): [Python-Dev] PEP 498: Literal String Interpolation is ready for pronouncement
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 9/5/2015 1:28 PM, Nathaniel Smith wrote:
On Sep 5, 2015 9:20 AM, "Guido van Rossum" <guido at python.org_ _<mailto:guido at python.org>> wrote:
The processing of f-strings described by the PEP uses several phases: - find the end of the string (the final quote[s]) using the same algorithm used for all string literals - expand \ escapes (e.g. \uXXXX) It might be worth calling out explicitly in the text how this works for what I suspect will be the most common case: embedded quoting embedded quotes, like f"{ table["foo"] }" - look for single {, then scan ahead to a matching } -- this skips matching () [] {} I assume this part of the algorithm uses the lexer and scans for matching tokens rather than just scanning for characters? I tried looking at the PEP to double check but couldn't find the relevant part. It's important for things like f"{ '}' }"
Actually, my current implementation doesn't use the lexer, although I suppose it could. I'm currently manually scanning the string, keeping track of strings and parens. To find the end of an expression, it looks for a '!', ':', or non-doubled '}', not inside of a string or (), [], or {}. There's a special case for '!=' so the bang isn't seen as ending the expression.
So it does work on this f-string:
f"{ '}' }" '}'
Although by using the lexer, I'd be worried about multiple levels of escaping. I'd have to give it some thought.
- look for optional !a,!r,!s and ! inside each {...} pair - take what's left, enclose it in (), parse as expression In fact maybe this whole list that Guido wrote should be copied into the PEP; it's a good summary :-).
I think the PEP does say these things, but maybe it could be tightened up.
Eric.
- Previous message (by thread): [Python-Dev] PEP 498: Literal String Interpolation is ready for pronouncement
- Next message (by thread): [Python-Dev] PEP 498: Literal String Interpolation is ready for pronouncement
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]