Unbinding a name referenced by an enclosing scope

Peter Otten __peter__ at web.de
Sun Feb 20 05:05:46 EST 2011


Grigory Javadyan wrote:

>>From the Python Language Reference (v 3.1):
> 
>> 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. Apparently, I'm not
> understanding the rule correctly. Can anyone explain it? Thanks.

The line you quote is probably meant to describe the following:

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

Please file a documentation bug if you can come up with a clarification.



More information about the Python-list mailing list