[Python-Dev] Unbinding a name referenced by an enclosing scope - error in documentation?

Grigory Javadyan grigory.javadyan at gmail.com
Sat Feb 26 22:23:16 CET 2011


Hi, guys
I'm not sure if python-dev is the right place to write to, but I'm
really curious about this:

>From the Python Language reference:
> It is illegal to unbind a name referenced by an enclosing scope; the compiler will report a SyntaxError.

But when I run the following code:

a = 3
def x():
 global a
 del(a)

print(a)
x()

it works fine; and when I change the order of calls:

x()
print(a)

I get a NameError, not a SyntaxError.

Now I asked the same question on python-list and people suggested that
the true meaning of that rule is:

>>> def f():
...     a = 42
...     def g():
...             nonlocal a
...             del a
...
SyntaxError: can not delete variable 'a' referenced in nested scope

Which looks weird, because the name is referenced in the _enclosed_
scope, not the _enclosing_ scope. Is there a typo in the documentation
or am I missing something?


More information about the Python-Dev mailing list