You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用compile()编译含函数的表达式遇语法错误,求解决方案

问题解决方法

错误原因

compile函数第三个参数传"eval"时,仅支持编译单个表达式,而def something(): ...是定义函数的语句,不属于表达式范畴,因此会触发语法错误。eval()本身也只能执行表达式,无法处理语句,所以包裹compile()也无效。

解决方案

方法1:使用compile的"exec"模式结合命名空间

exec模式支持编译并执行语句,我们可以通过自定义命名空间来获取函数调用的结果:

expr="""
def something():
     return False
# 将函数调用结果赋值给变量
result = something()
"""

# 创建空命名空间,用于存储执行过程中的变量
namespace = {}
# 编译并执行代码
exec(compile(expr, "", "exec"), namespace)
# 从命名空间中取出结果
somevar = namespace['result']
print(somevar)  # 输出: False

方法2:用lambda表达式适配eval(适合简单函数)

如果函数逻辑简单,可以将其改写为lambda表达式(属于表达式),直接用eval执行:

expr = "(lambda: False)()"
somevar = eval(expr)
print(somevar)  # 输出: False

关于第三方库

不需要额外第三方库,Python标准库的compile、exec、eval就可以满足需求。

内容的提问来源于stack exchange,提问作者PythonSmellsLikeCheese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:45:36