C'è un modo molto Python per scrivere quell'espressione senza scrivere esplicitamente un blocco try-except per StopIteration :
# some_iterable is some collection that can be iterated over
# e.g., a list, sequence, dict, set, itertools.combination(...)
for value in some_iterable:
print value
Puoi leggere i PEP pertinenti 234 255 se vuoi saperne di più sul perché è stato introdotto StopIteration e sulla logica degli iteratori.
Un principio generale in python è avere un modo per fare qualcosa (vedi import this ), e preferibilmente è bello, esplicito, leggibile e semplice, che il metodo pythonic soddisfa. Il tuo codice equivalente è necessario solo in quanto python non fornisce agli iteratori una funzione membro hasNext ; preferendo che gli utenti passino direttamente agli iteratori (e se devi fare qualcos'altro per provare a leggerlo e rilevare un'eccezione).
Questo rilevamento automatico di un'eccezione StopIteration alla fine di un iteratore ha senso ed è un analogo del EOFError generato se si legge una fine del file.