Python中的UnideLocalError?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (117)
counter = 0

def increment():
  counter += 1

increment()

上面的代码抛出一个UnboundLocalError

提问于
用户回答回答于

Python没有变量声明,所以它必须找出范围变量本身。它通过一个简单的规则这样做:如果函数中有一个变量的赋值,则该变量被视为本地变量。

counter += 1

尝试执行这一行将尝试读取局部变量的值。counter在分配之前,将生成一个UnboundLocalError.

如果counter是一个全局变量,global关键字会有帮助。如果increment()是一个局部函数,并且counter是局部变量,可以使用在Python3.x中的nonlocal

用户回答回答于

您需要使用全局语句因此,您将修改全局变量计数器,而不是局部变量:

counter = 0

def increment():
  global counter
  counter += 1

increment()

如果包围范围counter不是全局作用域,在Python 3.x上可以使用非局部语句...。在Python2.x上的相同情况下,您将无法重新分配到非本地名称counter所以你需要counter可变的并修改它:

counter = [0]

def increment():
  counter[0] += 1

increment()
print counter[0]  # prints '1'

扫码关注云+社区

领取腾讯云代金券