下面的代码给出了错误UnboundLocalError: local variable 'Var1' referenced before assignment
:
Var1 = 1
Var2 = 0
def function():
if Var2 == 0 and Var1 > 0:
print("Result 1")
elif Var2 == 1 and Var1 > 0:
print("Result 2")
elif Var1 < 1:
print("Result 3")
Var1 -= 1
function()
我怎样才能解决这个问题?
这是因为,尽管Var1
存在,您还在名称上使用赋值语句Var1
函数内部(Var1 -= 1
在底线)。当然,这会在函数作用域内创建一个变量,称为Var1
(说实话,一个-=
or +=
只会更新(重新分配)现有变量,但由于未知的原因(在这种情况下可能是一致的),Python 将其视为分配)。 Python 解释器在模块加载时看到这一点并决定(正确地)全局范围的Var1
不应在本地范围内使用,这会导致在本地分配变量之前尝试引用该变量时出现问题。
Python 开发人员通常不赞成在不必要的情况下使用全局变量,因为这会导致代码混乱且有问题。但是,如果您想使用它们来完成代码所暗示的内容,您可以简单地添加,在你的函数的顶部:
global Var1, Var2
这会告诉 Python 你do not打算定义一个Var1
or Var2
函数局部作用域内的变量。 Python 解释器在模块加载时看到这一点,并决定(正确地)在全局范围内查找对上述变量的任何引用。
一些资源
- Python 网站有一个很好的解释对于这个常见问题。
- Python 3 提供了相关的nonlocal声明 - 也检查一下。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)