我有这样的代码(简化):
def outer():
ctr = 0
def inner():
ctr += 1
inner()
但是ctr
导致错误:
Traceback (most recent call last):
File "foo.py", line 9, in <module>
outer()
File "foo.py", line 7, in outer
inner()
File "foo.py", line 5, in inner
ctr += 1
UnboundLocalError: local variable 'ctr' referenced before assignment
我该如何解决这个问题?我认为嵌套范围可以让我做到这一点。我尝试过“全局”,但仍然不起作用。
最佳答案
如果您使用的是 Python 3,则可以使用 nonlocal
语句来启用非本地名称的重新绑定(bind):
def outer():
ctr = 0
def inner():
nonlocal ctr
ctr += 1
inner()
如果您使用的是没有 nonlocal
的 Python 2,则需要在不进行裸名重新绑定(bind)的情况下执行递增(通过将计数器保留为某些裸名的项目或属性,不作为一个裸名本身)。例如:
...
ctr = [0]
def inner():
ctr[0] += 1
...
当然,无论您现在在其他地方使用裸ctr
,还是使用ctr[0]
。
关于python - 具有嵌套函数作用域的 UnboundLocalError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58930540/