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

Python函数内对全局变量使用+=运算符触发UnboundLocalError问题咨询

问题原理说明

这个报错是Python的静态变量作用域绑定规则导致的,底层逻辑如下:

  • Python在定义函数的编译阶段,会扫描函数内部的全部代码,只要检测到某个变量存在赋值操作(+=属于隐式赋值,等价于num = num + 6),就会直接将该变量标记为当前函数的局部变量,执行阶段查找该变量时只会在函数局部作用域查找,不会向上检索全局作用域的同名变量。
  • 你的代码中num += 6触发了赋值规则,num被标记为add_num函数的局部变量,执行这行代码时需要先读取等号右侧的num值完成计算,但此时局部变量num还没有完成赋值操作,就会抛出UnboundLocalError。
  • 如果函数内部没有对num的赋值操作,Python就不会把它标记为局部变量,查找时会自动向上匹配全局作用域的num,就能正常读取值,这也是你之前只读取不赋值不会报错的原因。
常见解决方案

方案1:修改全局变量

如果需要函数内部修改全局的num,需要用global关键字显式声明,告诉Python该变量走全局作用域,不要标记为局部变量:

num = 3

def add_num():
    global num
    num += 6
    print(num)

add_num() # 输出9
print(num) # 输出9

方案2:使用独立局部变量

如果不需要修改全局变量,只是函数内部要使用同名变量,提前给局部变量赋初始值即可:

num = 3

def add_num():
    num = 3 # 局部变量赋初始值
    num += 6
    print(num)

add_num() # 输出9
print(num) # 输出3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:36:03