Need help with understanding the following sentence from PEP 227 and the Python Language Reference
If a variable is referenced in an enclosed scope, it is an error to delete the name. The compiler will raise a SyntaxError for 'del name'.
Lack of examples caused I couldn't reproduce an error at compile time, so an explanation with examples is highly desirable.
The following raises the execption:
because the
spam
variable is being used in the enclosed scope ofbar
:Python detects that
spam
is being referenced inbar
but does not assign anything to that variable, so it looks it up in the surrounding scope offoo
. It is assigned there, making thedel spam
statement a syntax error.This limitation was removed in Python 3.2; you are now responsible for not deleting nested variables yourself; you'll get a runtime error (
NameError
) instead: