Python 3: UnboundLocalError: local variable referenced before assignment [duplicate] Python 3:UnboundLocalError:在分配之前引用本地变量
Python 3: UnboundLocalError: local variable referenced before assignment [duplicate] Python 3:UnboundLocalError:在分配之前引用本地变量
此问题已经有了答案:
以下代码报错:UnboundLocalError: local variable \'Var1\' referenced before assignment
:
Var1 = 1 Var2 = 0 def function(): if Var2 == 0 and Var1 > 0: print("Result One") elif Var2 == 1 and Var1 > 0: print("Result Two") elif Var1 < 1: print("Result Three") Var1 =- 1 function()
如何修复这个问题?
admin 更改状态以发布 2023年5月21日
如果你在函数内部设置变量的值,Python 会将其解释为创建一个具有该名称的局部变量。这个局部变量掩盖了全局变量。
在你的情况下,Var1
被认为是一个局部变量,并且在设置之前被使用,因此出现错误。
要解决这个问题,你可以在函数中显式声明它是一个全局变量,方法是在代码中加入 global Var1
。
Var1 = 1 Var2 = 0 def function(): global Var1 if Var2 == 0 and Var1 > 0: print("Result One") elif Var2 == 1 and Var1 > 0: print("Result Two") elif Var1 < 1: print("Result Three") Var1 =- 1 function()
这是因为,即使 Var1
存在,你在函数内部也使用了该名称的赋值语句 (Var1 -= 1
,位于最后一行)。自然地,这在函数作用域内创建了一个名为 Var1
的变量(实际上,-=
或 +=
只会更新(重新分配)一个已有的变量,但出于未知原因(很可能是上下文的一致性),Python 将其看作一个赋值)。Python 解释器在模块加载时看到这个,决定(正确地)不应该在局部作用域内使用全局作用域的 Var1
,这样在尝试在局部分配变量之前引用变量就会出现问题。
除非必要,否则不建议Python开发人员使用全局变量,因为这会导致困惑和有问题的代码。但是,如果您想使用它们来完成您的代码所示的内容,您只需要在函数的开头添加:
global Var1, Var2
这将告诉 Python,你不想在函数的局部作用域内定义 Var1
或 Var2
变量。Python 解释器在模块加载时看到这一点,决定(正确地)在全局作用域中查找对上述变量的任何引用。