New submission from skreft <[email protected]>:
Currently f-strings are parsed just as regular strings by lib2to3. However,
this has the problem that the invariant of a string node being a literal is now
broken.
This poses two problems. On one hand, if I want to compare that two string
nodes are equivalent I would need to do something like:
def string_nodes_are_eqivalent(node1, node2):
if is_f_string(node1) and is_f_string(node2):
# This would require to parse the nodes using ast.parse
return f_strings_are_equivalent(node1, node2)
if not is_f_string(node1) and not is_f_string(node2):
return ast.literal_eval(node1.value) == ast.literal_eval(node2.value)
return False
Note that ast.literal_eval does not accept f-strings.
Also note that ast.parse returns an ast.JoinedString for f-strings, whose
elements are either ast.Str or ast.FormattedValue, the latter being ast
expressions.
On the other hand, this has the problem of not being able to refactor the
expressions inside an f-string.
----------
messages: 320687
nosy: skreft
priority: normal
severity: normal
status: open
title: lib2to3 should parse f-strings
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue33991>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com