从Python语言参考(v 3.1,见这里 - http://docs.python.org/py3k/reference/executionmodel.html#naming-and-binding):
取消绑定封闭范围引用的名称是非法的;编译器将报告一个SyntaxError。
但是当我运行以下代码时:
a = 3
def x():
global a
del(a)
print(a)
x()
效果很好;当我改变通话顺序时:
x()
print(a)
我得到一个NameError,而不是一个SyntaxError。显然,我不能正确理解规则。有人能解释一下吗?谢谢。
答案 0 :(得分:4)
我不认为该规则适用于全球范围。全局范围始终完全可访问。
以下是一个例子:
>>> def outer():
... a=5
... def inner():
... nonlocal a
... print(a)
... del a
...
SyntaxError: can not delete variable 'a' referenced in nested scope
答案 1 :(得分:3)
我联系了python-devel列表上的人,这就是我得到的:
实际上你现在可以做到这一点3.2+。我现在已经删除了这句话。
所以,实际上这是一种文档错误。