本文介绍了你如何编译一个 ast.Expr?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

code='1+1'
import ast
expr = ast.parse(code).body[0]
print(type(expr))
compile(ast.Expression(expr), 'string', "eval")

抓住我

类'_ast.Expr'

回溯(最近一次调用最后一次):文件test_ast.py",第 6 行,在compile(ast.Expression(expr), '', "eval") TypeError: 期望某种类型的 expr,但得到 <_ast.Expr object at> 0x7fe89442d9e8>

Traceback (most recent call last): File "test_ast.py", line 6, in compile(ast.Expression(expr), '', "eval") TypeError: expected some sort of expr, but got <_ast.Expr object at> 0x7fe89442d9e8>

compile(expr, '<string>', "eval")

也不起作用:

类型错误:预期的表达式节点,得到了表达式

推荐答案

TLDR : 用 ast.Expression(expr.value) 替换 expr

TLDR : replace expr by ast.Expression(expr.value)

对此将 ast 节点转换为 python 对象 的评论并作出星期一的回答给了我解决方案:

A comment on this Convert ast node into python object and makeMonday answer gave me the solution:

code = 'a+1'
import ast
expr = ast.parse(code).body[0]
print(eval(compile(ast.Expression(expr.value), '<string>', "eval"), {"a": 4}, {}))

这篇关于你如何编译一个 ast.Expr?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-22 10:54