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

Python中使用eval语法调用三角函数失败的问题咨询

问题解决方法

你的代码无法运行是因为eval的全局命名空间里只传入了x,表达式中用到的math模块找不到对应引用。以下是两种可行的修正方案:

方案一:将math模块加入全局命名空间字典

把math模块也放进传入eval的全局字典中,让表达式能正常调用:

import math
# 这里的expr可以替换为用户输入的含x的代数表达式
expr = "math.sin(x)"
result = eval(expr, {'math': math, 'x': 2})
print(result)

方案二:用局部命名空间分离变量(更安全)

如果想限制用户表达式的访问范围,避免暴露整个math模块或内置函数,可以使用eval的第三个参数作为局部命名空间:

import math
# 用户输入的表达式直接写sin,无需前缀math.
expr = "sin(x)"
# 限制内置函数访问,只传入需要的变量和函数
result = eval(expr, {'__builtins__': None}, {'x': 2, 'sin': math.sin})
print(result)

这种方式能降低恶意输入带来的安全风险,后续要支持更多数学函数(比如cos、sqrt),直接把对应的math.cos、math.sqrt加到局部字典即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:07:03