给定一个ast
节点,该节点可以自行评估,但对ast.literal_eval
的文字不够,例如列表理解
src = '[i**2 for i in range(10)]'
a = ast.parse(src)
现在a.body[0]
是ast.Expr
,a.body[0].value
和ast.ListComp
。我想获得eval(src)
会产生的列表,但只给出ast.Expr
节点。
答案 0 :(得分:3)
也许您正在寻找compile()
?在AST对象上调用compile()
的结果是一个可以传递给eval()
的代码对象。
>>> src = '[i**2 for i in range(10)]'
>>> b = ast.parse(src, mode='eval')
>>> eval(compile(b, '', 'eval'))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]