Python 3:UnboundLocalError:赋值之前引用的局部变量

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()

我怎样才能解决这个问题?谢谢你的帮助!


有只小跳蛙
浏览 1591回答 3
3回答

慕村9548890

您可以通过传递参数而不是依赖Globals来解决此问题def&nbsp;function(Var1,&nbsp;Var2):&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Var2&nbsp;==&nbsp;0&nbsp;and&nbsp;Var1&nbsp;>&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Result&nbsp;One") &nbsp;&nbsp;&nbsp;&nbsp;elif&nbsp;Var2&nbsp;==&nbsp;1&nbsp;and&nbsp;Var1&nbsp;>&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Result&nbsp;Two") &nbsp;&nbsp;&nbsp;&nbsp;elif&nbsp;Var1&nbsp;<&nbsp;1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Result&nbsp;Three") &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Var1&nbsp;-&nbsp;1function(1,&nbsp;1)

繁星coding

这是因为,即使Var1存在,您也在Var1函数内部的名称上使用赋值语句(Var1 -= 1在底行)。当然,这会在函数的范围内创建一个变量(实际上,Var1a&nbsp;-=或者+=只会更新(重新分配)现有变量,但由于原因未知(可能是此上下文中的一致性),Python会将其视为赋值)。Python解释器在模块加载时看到这一点,并决定(正确地说)全局作用域Var1不应在本地作用域内使用,这会导致在本地分配变量之前引用该变量时出现问题。Python开发人员通常不赞成使用全局变量,因为它会导致令人困惑和有问题的代码。但是,如果您想使用它们来完成代码所暗示的内容,您只需添加:global&nbsp;Var1,&nbsp;Var2在你的功能顶部。这将告诉Python您不打算在函数的本地范围内定义Var1或Var2变量。Python解释器在模块加载时看到这一点并决定(正确地)以查找对全局范围中的上述变量的任何引用。一些资源Python网站对这个常见问题有很好的解释。Python 3提供了一个相关的nonlocal声明 - 也可以检查一下。

BIG阳

如果在函数内部设置变量的值,python会将其理解为使用该名称创建局部变量。此局部变量屏蔽全局变量。在您的情况下,Var1被视为一个局部变量,它在被设置之前使用,因此错误。要解决这个问题,你可以通过global Var1输入函数明确地说它是全局的。Var1&nbsp;=&nbsp;1Var2&nbsp;=&nbsp;0def&nbsp;function(): &nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;Var1 &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Var2&nbsp;==&nbsp;0&nbsp;and&nbsp;Var1&nbsp;>&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Result&nbsp;One") &nbsp;&nbsp;&nbsp;&nbsp;elif&nbsp;Var2&nbsp;==&nbsp;1&nbsp;and&nbsp;Var1&nbsp;>&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Result&nbsp;Two") &nbsp;&nbsp;&nbsp;&nbsp;elif&nbsp;Var1&nbsp;<&nbsp;1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Result&nbsp;Three") &nbsp;&nbsp;&nbsp;&nbsp;Var1&nbsp;=-&nbsp;1function()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python