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

Python中UnboundLocalError报错原因解析:为何同名变量在函数内赋值会引发未绑定局部变量错误

为什么第二个Python函数会抛出UnboundLocalError?

先来看你给出的两个对比案例:

正常运行的函数

x = 1
def test():
    y = x + 1
    return y

test()  # 返回2

抛出错误的函数

x = 1
def test2():
    x = x + 1
    return x

test2()  # UnboundLocalError: local variable 'x' referenced before assignment

这背后的核心原因是Python的变量作用域解析规则:

  • 当你在函数内部只是引用一个变量时,Python会按照「局部作用域 → 嵌套作用域 → 全局作用域 → 内置作用域」的顺序查找这个变量。第一个函数里的x就是这种情况:函数里没有定义x,所以Python找到全局的x=1,正常计算y=1+1。

  • 但如果你在函数内部对变量进行赋值操作(哪怕赋值语句在引用之后),Python会默认把这个变量标记为局部变量。在test2里,x = x +1这句话里,Python看到了对x的赋值,就会把x当作局部变量处理。但执行x +1的时候,局部的x还没有被赋值,自然就会抛出「局部变量引用前未赋值」的错误。

怎么解决这个问题?

如果你确实想在函数内部修改全局变量x,可以用global关键字声明:

x = 1
def test2():
    global x  # 声明x是全局变量
    x = x + 1
    return x

test2()  # 返回2,全局x也变成2

或者更推荐的方式是把全局变量作为参数传入函数,避免直接修改全局变量:

x = 1
def test2(num):
    return num + 1

test2(x)  # 返回2,全局x保持1不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:02:28