为什么对于已在全局范围内分配的变量,我会收到"赋值前引用"错误?



此代码:

my_num = 0
def my_func():
my_num = my_num + 1
my_func()

导致以下错误:

回溯(最近一次调用):文件"main.py",第 5 行,在 my_func() 文件 "main.py",第 4 行,my_func my_num = my_num + 1 UnboundLocalError:赋值前引用的局部变量"my_num">

为什么解释器不将表达式读作:

my_num = 0 + 1

因为您可以在不做任何特殊操作的情况下读取全局变量的值,但除非您使用global关键字,否则不会写入它们。

在这一行中my_num = my_num + 1您正在尝试读取写入全局变量。由于您没有指定my_num是函数中具有global my_num的全局变量,因此解释器将赋值的左侧视为新的局部变量,因此右侧变量没有任何意义。

函数中赋值的任何值都被视为局部变量,除非存在显式global语句。从文档中

将对象分配给单个目标以递归方式定义为 遵循。

  • 如果目标是标识符(名称):

    • 如果名称未出现在globalnonlocal语句中 当前代码块:名称绑定到当前 本地命名空间。

您需要将my_num声明为全局:

def my_func():
global my_num
my_num = my_num + 1

最新更新