Trovo che questo comportamento in Python sia piuttosto peculiare e credo che possa portare a molti bug, specialmente se si dispone di una funzione / metodo che accetta un elenco e restituisce un altro elenco dopo aver eseguito alcune operazioni sugli elementi nell'elenco.
x = []
val = (row for row in x) # create a generator
print(next(val)) # will raise StopIteration exception
for i in x:
if not i:
raise ValueError('The sequence is empty') # Exception is not raised
print(i) # does nothing and does not raise an exception
Se provi a scorrere su un generatore con next
ed è vuoto o ha raggiunto la fine, viene sollevata un'eccezione StopIteration
, ma questo non è lo stesso quando si utilizza un ciclo for per scorrere su un elenco o qualsiasi iterabile in Python.
So che potrei scrivere if not x:
per controllare se l'elenco è vuoto ma credo che un iterabile vuoto dovrebbe generare un'eccezione quando provi a scorrere su di esso poiché non vi è alcun beneficio nel ricollegarlo.
Voglio sapere se c'è qualche motivo speciale per questo comportamento nella progettazione della lingua o non sto considerando un altro caso in cui potrebbe essere utile. Penso che lo stesso valga anche per Java
.