取消绑定封闭范围引用的名称

时间:2011-02-20 08:50:47

标签: python syntax-error unbind

从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。显然,我不能正确理解规则。有人能解释一下吗?谢谢。

2 个答案:

答案 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+。我现在已经删除了这句话。

所以,实际上这是一种文档错误。