小编Yod*_*kio的帖子

如何在“eval”模式下编译ast节点

eval我想创建一个稍后可以重用的代码对象。我需要根据ast以编程方式生成的一些节点来执行此操作,因此我无法将代码作为字符串传递给compile函数。如何构造一个有效的ast编译节点?以下是我尝试过的一些事情:

tree = ast.parse("2+2")
exe = compile(tree.body[0], filename="", mode="eval")
Run Code Online (Sandbox Code Playgroud)

类型错误:预期的表达式节点,得到 Expr

tree = ast.BinOp(left=ast.Num(n=2), right=ast.Num(n=2), op=ast.Add())
exe = compile(tree, filename="", mode="eval")
Run Code Online (Sandbox Code Playgroud)

类型错误:预期的表达式节点,得到 BinOp

tree = ast.BinOp(left=ast.Num(n=2), right=ast.Num(n=2), op=ast.Add())
expr = ast.Expression(body=[tree])
ast.fix_missing_locations(expr)
exe = compile(expr, filename="", mode="eval")
Run Code Online (Sandbox Code Playgroud)

类型错误:expr 中缺少必填字段“lineno”

python abstract-syntax-tree

5
推荐指数
1
解决办法
1805
查看次数

标签 统计

abstract-syntax-tree ×1

python ×1