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

Python函数内先访问同名全局变量后赋值局部变量为何报错?

a=1

def func():
    print(a)
    a=2

func()

运行上述代码抛出错误:

local variable 'a' referenced before assignment

报错原因

Python对函数内变量的作用域判定是函数编译阶段就完成的,不是运行时逐行动态判断的:

  • 只要函数内部任意位置出现了对变量a的赋值操作(此处是a=2这行代码),解释器在编译函数字节码时,就会直接将a标记为该函数的局部变量,整个函数范围内所有对a的访问都会优先查找局部作用域,不会 fallback 到全局作用域查找同名变量。
  • 执行到print(a)时,局部变量a还没有完成赋值,因此直接抛出“局部变量在赋值前被引用”的错误。

如果需要让函数内的a使用全局变量,显式声明即可:

a=1

def func():
    global a
    print(a)
    a=2

func()

修改后运行会正常输出1,同时全局变量a的值会被修改为2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:03