首页 > 解决方案 > 如何格式化 AST 解析

问题描述

我想格式化以下 ast 解析:

>>> import ast
>>> print(ast.dump(ast.parse('-a+b')))
Module(body=[Expr(value=BinOp(left=UnaryOp(op=USub(), operand=Name(id='a', ctx=Load())), op=Add(), right=Name(id='b', ctx=Load())))])

似乎该indent选项是在 python3.9 中引入的,但在那之前我没有看到“漂亮打印”的选项。有哪些选项可以为语法树打印格式良好的输出?

标签: pythonpython-3.xabstract-syntax-tree

解决方案


如果您需要在较早的 python 版本中漂亮地打印 AST 并且对 Python3.9 中的 indent 函数感到满意,为什么不直接dump从 3.9 中获取该函数并在您的项目中实现它呢?源代码在这里:https ://github.com/python/cpython/blob/e56d54e447694c6ced2093d2273c3e3d60b36b6f/Lib/ast.py#L111-L175

而且它看起来不是很复杂,似乎没有使用 3.9 特有的任何功能。


推荐阅读