为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

有只小跳蛙 2019-07-26 11:24:15
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)


查看完整回答
反对 回复 2019-07-26
?
繁星coding

TA贡献1797条经验 获得超4个赞

这是因为,即使Var1存在,您也在Var1函数内部的名称上使用赋值语句(Var1 -= 1在底行)。当然,这会在函数的范围内创建一个变量(实际上,Var1-=或者+=只会更新(重新分配)现有变量,但由于原因未知(可能是此上下文中的一致性),Python会将其视为赋值)。Python解释器在模块加载时看到这一点,并决定(正确地说)全局作用域Var1不应在本地作用域内使用,这会导致在本地分配变量之前引用该变量时出现问题。

Python开发人员通常不赞成使用全局变量,因为它会导致令人困惑和有问题的代码。但是,如果您想使用它们来完成代码所暗示的内容,您只需添加:

global Var1, Var2

在你的功能顶部。这将告诉Python您不打算在函数的本地范围内定义Var1Var2变量。Python解释器在模块加载时看到这一点并决定(正确地)以查找对全局范围中的上述变量的任何引用。

一些资源

  • Python网站对这个常见问题有很好的解释

  • Python 3提供了一个相关的nonlocal声明 - 也可以检查一下。


查看完整回答
反对 回复 2019-07-26
?
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()


查看完整回答
反对 回复 2019-07-26
  • 3 回答
  • 0 关注
  • 1590 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信