我有一个python程序的AST,想要手动评估if语句的条件。
cond = node.test
b = eval(compile(cond,"<string>","eval"))
print b
其中node是If-Node,给我 TypeError:expected Expression节点,得到Compare ,即使Compare是根据ast的python doc中的语法表达式。
有什么想法吗?
答案 0 :(得分:4)
您有一个ast.expr
子类,不是一个ast.Expression
顶级节点。
compile()
只能使用mod
个对象,因此Module
,Interactive
或Expression
中的一个,取决于{{1}的第三个参数}。对于compile()
,请使用'eval'
。
您可以创建一个包含 ast.Expression()
节点的:
ast.Compare
因为abstract grammar将其定义为:
expr = ast.Expression(cond)
这可以编译:
Expression(expr body)
演示:
compile(expr, '<file>', 'eval')