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

Python同名全局变量赋值局部变量时UnboundLocalError问题咨询

为什么Python中局部变量赋值前引用会触发UnboundLocalError?

这个问题其实是Python的变量作用域解析规则导致的,这个行为在Python 2和3中是一致的,我来给你拆解清楚:

首先看你的两个函数:

  • 对于f(),函数内部没有对a的赋值操作,所以Python会按照LEGB(局部作用域→嵌套作用域→全局作用域→内置作用域)的顺序往上查找a,最终找到全局的a=1,所以能正常输出结果。
  • 而g()里有a = a这个赋值语句——Python在编译函数代码的时候,只要检测到函数内部存在对某个变量的赋值操作,就会直接把这个变量标记为局部变量,不管这个赋值语句写在函数的哪个位置。

这就导致执行a = a时,右边的a会被当作局部变量来解析,但此时这个局部的a还没有被赋值,自然就抛出UnboundLocalError了。

举个更直观的例子,下面这段代码也会触发同样的错误:

a = 10
def h():
    print(a)  # 这里会报错,因为下面有对a的赋值
    a = 20
h()

如果你的需求是在函数里先引用全局的a再重新赋值,只需要用global关键字声明a是全局变量即可,修改后的g()是这样的:

a = 1
def g():
    global a
    a = a
    print(a)
g()  # 正常输出1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:32:21