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

使用字典时Python eval()无法识别numpy与math符号的问题

解决含numpy/math模块的数组公式求值问题

问题原因

当给eval()传入第二个参数作为全局命名空间时,Python不会自动将当前作用域中的math、np等模块导入到这个自定义命名空间里,因此公式里的np.e、math.erf会因找不到定义而报错。

解决方案

方案1:将模块加入自定义命名空间

直接把math和np添加到变量字典中,确保eval能识别这些模块:

import math
import numpy as np

formula = 'np.e**x + math.erf(x) + np.pi + math.erf(u)'
var = {'x': np.array([1,1]), 'u': np.array([0.1,0.2]), 'math': math, 'np': np}
result = eval(formula, var)
print(result)

方案2:合并全局命名空间与自定义变量

用globals()获取当前全局作用域的所有变量(包括已导入的模块),和自定义变量字典合并后传给eval:

import math
import numpy as np

formula = 'np.e**x + math.erf(x) + np.pi + math.erf(u)'
var = {'x': np.array([1,1]), 'u': np.array([0.1,0.2])}
result = eval(formula, {**globals(), **var})
print(result)

方案3:改用numpy矢量化函数(推荐)

math.erf仅支持单个数值,无法直接处理数组(数组长度大于1时会报错),建议替换为numpy原生的np.erf,它天然支持数组运算,更适配你的场景:

import numpy as np

formula = 'np.e**x + np.erf(x) + np.pi + np.erf(u)'
var = {'x': np.array([1,1]), 'u': np.array([0.1,0.2])}
result = eval(formula, {**globals(), **var})
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:45:28