Python 解除绑定封闭范围引用的名称

Python 解除绑定封闭范围引用的名称,python,syntax-error,unbind,Python,Syntax Error,Unbind,从Python语言参考(V3.1,请参见此处-)中: 取消绑定封闭范围引用的名称是非法的;编译器将报告一个语法错误 但当我运行以下代码时: a = 3 def x(): global a del(a) print(a) x() 它工作得很好;当我改变通话顺序时: x() print(a) 我得到的是一个名称错误,而不是语法错误。显然,我没有正确理解规则。有人能解释一下吗?谢谢 我认为这条规则不适用于全球范围。全局范围始终是完全可访问的 下面是一个例子: >>>

从Python语言参考(V3.1,请参见此处-)中:

取消绑定封闭范围引用的名称是非法的;编译器将报告一个语法错误

但当我运行以下代码时:

a = 3

def x():
  global a
  del(a)

print(a)
x()
它工作得很好;当我改变通话顺序时:

x()
print(a)

我得到的是一个名称错误,而不是语法错误。显然,我没有正确理解规则。有人能解释一下吗?谢谢

我认为这条规则不适用于全球范围。全局范围始终是完全可访问的

下面是一个例子:

>>> def outer():
...     a=5
...     def inner():
...         nonlocal a
...         print(a)
...         del a
...
SyntaxError: can not delete variable 'a' referenced in nested scope

我联系了python-devel列表上的人员,下面是我得到的:

实际上你现在可以做到3.2+。我现在删除了那句话


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

你能链接到你引用的地方吗?这页说应该出现一个名称错误:@carl:我也花了一些时间才找到它;在语言参考的适当部分添加了链接。