将 ast 节点转换为 python 对象

Kys*_*Tao 5 python abstract-syntax-tree

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

src = '[i**2 for i in range(10)]'
a = ast.parse(src)
Run Code Online (Sandbox Code Playgroud)

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

Amb*_*ber 5

也许您正在寻找compile()?调用compile()AST 对象的结果是一个可以传递给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]
Run Code Online (Sandbox Code Playgroud)