Python 3:UnboundLocalError:赋值之前引用的局部变量以下代码给出了错误UnboundLocalError: local variable 'Var1' referenced before assignment:Var1 = 1Var2 = 0def 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 =- 1function()我怎样才能解决这个问题?谢谢你的帮助!
3 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
您可以通过传递参数而不是依赖Globals来解决此问题
def function(Var1, Var2): if Var2 == 0 and Var1 > 0: print("Result One") elif Var2 == 1 and Var1 > 0: print("Result Two") elif Var1 < 1: print("Result Three") return Var1 - 1function(1, 1)
繁星coding
TA贡献1797条经验 获得超4个赞
这是因为,即使Var1
存在,您也在Var1
函数内部的名称上使用赋值语句(Var1 -= 1
在底行)。当然,这会在函数的范围内创建一个变量(实际上,Var1
a -=
或者+=
只会更新(重新分配)现有变量,但由于原因未知(可能是此上下文中的一致性),Python会将其视为赋值)。Python解释器在模块加载时看到这一点,并决定(正确地说)全局作用域Var1
不应在本地作用域内使用,这会导致在本地分配变量之前引用该变量时出现问题。
Python开发人员通常不赞成使用全局变量,因为它会导致令人困惑和有问题的代码。但是,如果您想使用它们来完成代码所暗示的内容,您只需添加:
global Var1, Var2
在你的功能顶部。这将告诉Python您不打算在函数的本地范围内定义Var1
或Var2
变量。Python解释器在模块加载时看到这一点并决定(正确地)以查找对全局范围中的上述变量的任何引用。
一些资源
BIG阳
TA贡献1859条经验 获得超6个赞
如果在函数内部设置变量的值,python会将其理解为使用该名称创建局部变量。此局部变量屏蔽全局变量。
在您的情况下,Var1
被视为一个局部变量,它在被设置之前使用,因此错误。
要解决这个问题,你可以通过global Var1
输入函数明确地说它是全局的。
Var1 = 1Var2 = 0def 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 =- 1function()
添加回答
举报
0/150
提交
取消