在Python本身中标记或解析Python代码



代码标准库似乎在某种程度上包含了编译和解释Python的函数,但我想:

  • 将完整和不完整的语句和表达式解析为令牌流和语法树

我如何在Python本身中做到这一点?

您可以使用标准库函数ast或更漂亮的astor库,这里有一个简单的例子:

import ast
import astor
code = '''
def add(a, b):
if True:
return a + b
else:
raise Exception
'''
tree = ast.parse(code)
print(astor.dump_tree(tree))

输出是抽象语法树的人类可读表示:

Module(
body=[
FunctionDef(name='add',
args=arguments(posonlyargs=[],
args=[arg(arg='a', annotation=None, type_comment=None),
arg(arg='b', annotation=None, type_comment=None)],
vararg=None,
kwonlyargs=[],
kw_defaults=[],
kwarg=None,
defaults=[]),
body=[
If(test=Constant(value=True, kind=None),
body=[Return(value=BinOp(left=Name(id='a'), op=Add, right=Name(id='b')))],
orelse=[Raise(exc=Name(id='Exception'), cause=None)])],
decorator_list=[],
returns=None,
type_comment=None)],
type_ignores=[])

最新更新