Python 3:UnboundLocalError:赋值前引用的局部变量[duplicate]

这个问题在这里已经有答案了
首次使用后重新分配局部变量时出现UnboundLocalError

(11个答案)

六年前关闭的

以下代码给出了错误UnboundLocalError:赋值前引用的局部变量“Var1”:

Var1=1
Var2=0
def函数():
如果Var2==0且Var1>0:
打印(“结果一”)
elif Var2==1,Var1>0:
打印(“结果二”)
艾利夫·瓦勒1<1:
打印(“结果三”)
Var1=-1
函数()

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

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

Python开发人员通常不赞成在必要的情况下使用全局变量,因为这会导致代码混乱和问题。但是,如果您想使用它们来完成代码的含义,您可以简单地添加:

全局变量1、变量2

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

一些资源

  • Python网站对这个常见问题有很好的解释
  • Python3提供了一个相关的非本地语句——也可以查看它

发表评论