python - 具有嵌套函数作用域的 UnboundLocalError

标签 python function

我有这样的代码(简化):

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/

相关文章:

python - 如何在django的 View 页面中识别模板页面的按钮点击事件?

javascript - 井字游戏循环

python - 使用带有高级运算符的 python 的功能管道

c - 如何在没有 math.h 的情况下编写一个简单的对数函数?

javascript - 将 2 个函数转换为 1 个函数

python - 如何在SVM中操作多维特征或者使用多维特征来训练模型?

python - 立即转义整个字典/JSON

python - pyqtgraph中的ScaleBar不会设置ParentItem

python - 使用 5 的倍数作为变量可以更轻松地使用模数

function - 具有可变参数数量的 OCaml 函数