Un esempio può essere questo:
>>> def outer():
... x = 0
... y = (x for i in range(10))
... del x
...
SyntaxError: can not delete variable 'x' referenced in nested scope
In pratica significa che non è possibile eliminare le variabili che vengono utilizzati in blocchi interni (in quel caso il genexp).
Si noti che questo si applica per python < = 2.7.xe python < 3.2. In python3.2 che è esso non genera errore di sintassi:
>>> def outer():
... x = 0
... y = (x for i in range(10))
... del x
...
>>>
Vedi this collegamento per tutta la storia del cambiamento.
Credo che i semanthics python3.2 è più corretta, perché se si scrive lo stesso codice di fuori di una funzione che funziona:
#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
Mentre mettendo lo stesso codice in una funzione, non solo cambia un'eccezione ma l'errore è in fase di compilazione.