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?