【发布时间】:2022-06-27 04:00:34
【问题描述】:
当将 python AST 解析器模块与包含多行字符串的脚本结合使用时,这些多行字符串总是被简化为单行引号字符串。示例:
import ast
script = "text='''Line1\nLine2'''"
code = ast.parse (script, mode='exec')
print (ast.unparse (code))
node = code.body[0].value
print (node.lineno, node.end_lineno)
输出是:
> text = 'Line1\nLine2'
> 1 2
因此,尽管在解析之前是多行字符串,但在未解析时文本会减少为单行引号字符串。这使得脚本转换变得困难,因为在解析转换后的 AST 图时多行会丢失。
有没有办法用 AST 正确解析/反解析带有多行字符串的脚本?
提前谢谢你。
【问题讨论】:
-
字符串文字的 Value 对象包含列号和行号,因此您可以从解析的文本中提取原始源字符串。但是,将它与 unparse() 的其余部分放在一起需要一些技巧。 (不过绝对可行。)
-
是的,但这需要再次进行一些启发式方法,并且引用等将是一个手动问题。我仍然希望能够将此委托给 AST 对象。
标签: python parsing abstract-syntax-tree multiline quoting