mi piacerebbe leggere al massimo 20 righe da un file CSV:Python: eccezione StopIteration e list comprehension
rows = [csvreader.next() for i in range(20)]
funziona bene se il file ha 20 o più righe, non riesce con un'eccezione StopIteration altrimenti.
Esiste un modo elegante per gestire un iteratore che potrebbe generare un'eccezione StopIteration in una lista di comprensione o dovrei utilizzare un ciclo regolare?
Grazie Ayman. Sembra che le intese sulle liste debbano essere aggiornate per gestire StopIteration, no? Sembra che "for" sia già stato aggiornato per affrontarlo (smette di iterare quando incontra l'eccezione, rilevandolo implicitamente), e non vedo un motivo ovvio per cui le list comprehensions non facciano lo stesso. – Parand
per catturare StopIteration relativo al suo iterabile, non ad altri oggetti simili nella sua suite. Per esempio c = iter (intervallo (5)) for i in range (10): \t print i, c.next() solleverà l'eccezione StopIteration rispetto a c. – Mapio
Un ciclo for NON acquisisce implicitamente StopIteration. Lo prende solo se viene lanciato dal prossimo metodo dell'iteratore, non se viene gettato nel corpo del ciclo. Nella tua domanda, csvreader.next() è analogo al corpo del ciclo. – Miles