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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:00:01