New submission from Tim Hatch <t...@timhatch.com>:
TL;DR f"{x+2}" and f"{x=}" do something sensible. "{x+2}".format(x=1) and "{x=}".format(x=1) raise KeyError. f"{0.1}" and "{0.1}".format(...) are different. Having had a feature request to be able to codemod f-strings[1] and just learning about issue36817[2] last night, I went digging into how these are parsed in the standard library to be able to reuse that. str.format, string.Formatter, and the _string module can only parse literal keys, not expressions, despite appearing to take the same syntax as f-strings. I'm happy to contribute code to change this, but unsure if it's considered a bug or feature (now that we're past feature freeze for 3.8). I would love to see these converge to prevent confusion and let us document in just one place. The {} and {1} style are still exceptional. We already parse expressions and the "=" suffix acceptably, >>> list(_string.formatter_parser("{1+1}")) [('', '1+1', '', None)] >>> list(_string.formatter_parser("{(x)}")) [('', '(x)', '', None)] >>> list(_string.formatter_parser("{x=!r:1}")) [('', 'x=', '1', 'r')] >>> list(_string.formatter_parser("{ x = }")) [('', ' x = ', '', None)] But the consumers would need to check for /=\s*$/ and call eval on the items in formatter_field_name_split. (I lack a good heuristic, maybe we eval every time unless it's strictly numeric?) It would also break unusual uses like these in the name of unification >>> "{1+1}".format(**{"1+1": "zzz"}) 'zzz' and >>> class T: ... pass ... >>> setattr(T, "0", "zero") >>> f"{T.0}" File "<fstring>", line 1 (T.0) ^ SyntaxError: invalid syntax >>> "{0.0}".format(T) 'zero' [1] https://github.com/facebookincubator/Bowler/issues/87 [2] incorrectly listed in Misc/NEWS.d/3.8.0b1.rst as issue36774 btw ---------- components: Library (Lib) messages: 346065 nosy: barry, eric.smith, larry, lisroach, lukasz.langa, serhiy.storchaka, thatch priority: normal severity: normal status: open title: str.format and f-string divergence type: enhancement versions: Python 3.8, Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue37341> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com