函数内使用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
相关产品推荐
相关产品推荐

