我用

>>> import ast
>>> T = ast.parse('a * (b + c)', mode='eval').body

得到某个表达式的抽象语法树。
现在我想找回某个特定节点的源字符串。例如
>>> get_source_back(T.right)
'(b + c)'

有什么解决办法吗?
(当然,我可以使用.walk或NodeVisitor并手动指定如何从节点构造字符串。但这并没有给我原始的来源,我必须小心括号等。)

最佳答案

你不会得到确切的原始来源。但是astor包将返回与原始源相同的重新编译源代码。
编辑后添加由github上的版本提供的重构源代码比最新版本提供的源代码要好得多(例如,更少的括号和更好的docstring处理)。我想新的版本即将发布。
(注释中提到的unparser包悲观地将括号放在所有内容上。)

10-06 14:25