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

已定义全局变量a仍报UnboundLocalError,为何未引用全局变量?

为什么这段Python代码没有引用全局变量a反而报错?

原代码:

a = 10

def b(x):
    if(x == True):
        a = 2
    return a

print(b(False))

报错信息翻译:

回溯(最近的调用最后):
  文件 "<string>", 第8行, 在 <module> 中
文件 "<string>", 第6行, 在 b 函数中
UnboundLocalError: 局部变量 'a' 在赋值前被引用

原因解析

Python的变量作用域规则是:只要函数内部存在对某个变量的赋值操作,不管这个操作会不会被实际执行(比如在条件分支里),Python在编译函数时就会把这个变量标记为局部变量,不会去引用同名的全局变量。

在你的代码里,函数b的if分支里有a = 2这个赋值操作,所以Python直接认定a是b的局部变量。当调用b(False)时,if分支不会执行,局部的a根本没被赋值,但后面又执行return a,这就触发了“局部变量未赋值就引用”的错误。

解决办法

有两种常见处理方式:

  • 如果需要在函数里修改全局变量a,要在函数开头加global a声明,明确告诉Python这个a是全局变量:
    a = 10
    
    def b(x):
        global a
        if(x == True):
            a = 2
        return a
    
    print(b(False))  # 输出10
    
  • 如果只是想读取全局变量a,不要在函数里对a做赋值操作,把分支里的变量名改成别的(比如a_local = 2),或者去掉赋值逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:10:43