Python跨函数引用字典报NameError:name 'A123_dict'未定义问题排查
错误原因
- 作用域规则限制:函数内部定义的变量为局部变量,仅在函数的执行上下文中可访问,函数执行结束后外部无法直接通过变量名调用内部定义的局部变量。你代码里的
A123_dict是aaa()函数的局部变量,Z456_dict是zzz()函数的局部变量,在全局作用域直接访问这两个名字自然会触发NameError。 - 未正确获取函数返回值:虽然你在两个函数中都写了return语句返回字典,但你注释了接收返回值的代码,也没有主动调用函数获取返回结果,相当于这两个字典生成后没有被保存到全局可访问的变量中。
- 额外潜在问题:
zzz()函数中字典的列表值用到的a、b、c、d、e、f、g、h、i均未提前定义,解决第一个报错后运行仍会触发变量未定义错误。
修复方案
提供两种常用修复方式:
方案1:提前调用函数,将返回值赋值给全局变量后传入
def aaa(): A123_dict = {'01':'abc', '02':'def', '03':'ghi'} return A123_dict def zzz(): # 先给用到的变量赋值,这里举个例子,你可以换成实际需要的值 a,b,c,d,e,f,g,h,i = 1,2,3,4,5,6,7,8,9 Z456_dict = {'01':[a, b, c], '02':[d, e, f], '03':[g, h, i]} return Z456_dict def NewFunction(A123_dict, Z456_dict): print(A123_dict.items()) print(Z456_dict.items()) # 调用函数获取返回值,赋值给全局变量 A123_dict = aaa() Z456_dict = zzz() # 再传入新函数 NewFunction(A123_dict, Z456_dict)
方案2:直接将函数调用作为参数传入
如果不需要在其他地方复用这两个字典,也可以直接在传参时调用函数获取返回值:
def aaa(): A123_dict = {'01':'abc', '02':'def', '03':'ghi'} return A123_dict def zzz(): a,b,c,d,e,f,g,h,i = 1,2,3,4,5,6,7,8,9 Z456_dict = {'01':[a, b, c], '02':[d, e, f], '03':[g, h, i]} return Z456_dict def NewFunction(A123_dict, Z456_dict): print(A123_dict.items()) print(Z456_dict.items()) # 传参时直接调用函数 NewFunction(aaa(), zzz())
内容的提问来源于stack exchange,提问作者mc.python
相关产品推荐
相关产品推荐

