在python中评估if的条件

时间:2014-07-23 14:51:09

标签: python eval abstract-syntax-tree

我有一个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中的语法表达式。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您有一个ast.expr子类,不是一个ast.Expression顶级节点。

compile()只能使用mod个对象,因此ModuleInteractiveExpression中的一个,取决于{{1}的第三个参数}。对于compile(),请使用'eval'

您可以创建一个包含 ast.Expression()节点的

ast.Compare

因为abstract grammar将其定义为:

expr = ast.Expression(cond)

这可以编译:

Expression(expr body)

演示:

compile(expr, '<file>', 'eval')