【问题标题】:Why do I get Unbound Local Error?为什么我会收到未绑定的本地错误?
【发布时间】:2013-08-27 18:59:24
【问题描述】:

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

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: local variable 'Z' referenced before assignment”

我已经阅读了我能找到的所有未绑定的本地错误和引用前的作业问题,但没有一个问题看起来相似,而且没有一个解决方案有效。

我应该让 Z 成为全局变量吗?

【问题讨论】:

    标签: python


    【解决方案1】:

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

    func1.Z += 1
    

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

    【讨论】:

    • 啊!我不知道。出于好奇,self.Z 也会起作用吗?我会在 10 分钟内选择这个作为答案。
    • @AlexBaldwin:不。 self 不是函数; self 在这里什么都不是。
    • pythontutor.com/visualize.html# 看这里以了解更多关于 python 名称和值的信息。 nedbatchelder.com/text/names.html 是一个很好的描述。
    • @AlexBaldwin:不;这里没有self 参数; this 是函数对象的一个​​属性(Python 中的一切都是对象);因为该函数只有一个副本,本质上是全局的。
    猜你喜欢
    • 2013-05-31
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多