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

函数内使用eval()出现NameError:name 'x'未定义的问题求解

问题解决:NameError: name 'x' is not defined

问题原因

eval() 默认只会在全局命名空间中查找变量,而你函数里的 x 是局部变量,执行 eval(i) 时无法识别到这个局部变量,因此抛出 NameError。

修复方案

修改 system 函数,给 eval() 传入当前的局部作用域,让它能访问到函数内的 x:

def system(into):
    global sys
    x = into
    # 传入locals(),让eval可以读取函数内的局部变量
    sis = [eval(i, globals(), locals()) for i in sys]
    return sis

if __name__ == "__main__":
    sys = ['x[0]+x[1]','2*x[0]-3*x[1]']
    # 测试调用示例
    print(system([1, 2]))  # 输出结果:[3, -4]

额外优化建议

  • 移除 global 依赖:把方程组作为参数传入函数,让代码更模块化,避免全局变量带来的耦合问题
  • 替换 eval():如果是处理数学计算场景,建议使用 sympy 这类专业符号计算库,安全性和功能性都更强

优化后的示例代码:

def system(into, equations):
    x = into
    return [eval(eq, globals(), locals()) for eq in equations]

if __name__ == "__main__":
    equations = ['x[0]+x[1]','2*x[0]-3*x[1]']
    print(system([1, 2], equations))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:29:56