为什么我会收到未绑定的本地错误?

时间:2013-08-27 18:59:24

标签: python

所以有问题的函数很长,所以我会总结一下。

def func1( X = None, Y = None ) :
  if X :
    dostuff
      if condition :
        Z += 1
  if Y :
    print Y

func1.Z = 0

def func2( A )
  for loop that does stuff and calls func1

当我运行它时,它告诉我Z + = 1行有一个错误“UnboundLocalError:在赋值之前引用的局部变量'Z'”

我已经在我可以找到的分配问题之前阅读了所有未绑定的本地错误和Referanced,但没有一个问题看似相似,并且没有一个解决方案有效。

我应该让Z成为全球性的吗?

1 个答案:

答案 0 :(得分:5)

因为在函数对象上设置属性会创建本地名称。也可以在函数中的函数对象上引用它:

func1.Z += 1

或使其成为全球性的。更好的是,避免这样的恶作剧,只需使Z成为本地或函数参数,并将函数末尾的Z返回给调用者。