在 exec 中使用非本地

Using nonlocal inside exec

为什么会出现下面的代码:

exec("""
a = 3
def b():
  nonlocal a
  a = a + 1
b() #error occurs even without this call
print(a)
"""
)

)

报错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 4
SyntaxError: no binding for nonlocal 'a' found

这是满足 text/code 比率的更多文本。

nonlocal 语句在封闭的函数命名空间中查找您命名的变量(如果在任何此类命名空间中都没有此类变量,则会引发错误)。如果没有封闭函数,则不需要 nonlocal。如果您想要顶层的变量,则需要使用 global 语句。