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