Un ejemplo puede ser la siguiente:
>>> def outer():
... x = 0
... y = (x for i in range(10))
... del x
...
SyntaxError: can not delete variable 'x' referenced in nested scope
Básicamente esto significa que no puede eliminar las variables que se utilizan en los bloques interiores (en ese caso el genexp).
Tenga en cuenta que esto se aplica a python < = 2.7.x y python < 3.2. En python3.2 Es que no plantea error de sintaxis:
>>> def outer():
... x = 0
... y = (x for i in range(10))
... del x
...
>>>
Ver this vínculo para toda la historia del cambio.
creo que los semanthics python3.2 es más correcto ya que si se escribe el mismo código fuera de una función funciona:
#python2.7
>>> x = 0
>>> y = (x for i in range(10))
>>> del x
>>> y.next() #this is what I'd expect: NameError at Runtime
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <genexpr>
NameError: global name 'x' is not defined
Mientras se pone el mismo código en una función, no sólo cambia excepción, sino el error está en tiempo de compilación.