将ast节点转换为python对象

时间:2012-05-25 02:49:13

标签: python abstract-syntax-tree

给定一个ast节点,该节点可以自行评估,但对ast.literal_eval的文字不够,例如列表理解

src = '[i**2 for i in range(10)]'
a = ast.parse(src)

现在a.body[0]ast.Expra.body[0].valueast.ListComp。我想获得eval(src)会产生的列表,但只给出ast.Expr节点。

1 个答案:

答案 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]