给定一个可以自己评估但不足以作为字面值的 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
节点。给定一个可以自己评估但不足以作为字面值的 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
节点。
compile(a.body[0],'','eval')
出现了错误expected Expression node, got Expr
。(Expr
不仅仅是Expression
的缩写吗?) - Kyss Taoa.body[0]
,直接传递a
就可以了。在 Python 的 语法规则 中,Expr
是指Expression
的主体内容。 - Amberast.parse(src, mode='eval')
来获取一个Expression
对象。 - Amber