Ich mag würde höchstens 20 Zeilen aus einer CSV-Datei lesen:Python: StopIteration Ausnahme und Listenkomprehensionen
rows = [csvreader.next() for i in range(20)]
funktioniert gut, wenn die Datei 20 oder mehr Zeilen enthält, schlägt mit einer StopIteration Ausnahme anders.
Gibt es eine elegante Möglichkeit, mit einem Iterator umzugehen, der eine StopIteration-Exception in ein Listenverständnis werfen könnte, oder sollte ich eine reguläre for-Schleife verwenden?
Danke Ayman. Es sieht so aus, als müssten Listenübersichten aktualisiert werden, um mit StopIteration fertig zu werden, nein? Es scheint, dass "für" bereits aktualisiert wurde, um damit fertig zu werden (es hört auf zu iterieren, wenn es auf die Ausnahme trifft, implizit abfängt), und ich sehe keinen offensichtlichen Grund dafür, dass Listenergänzungen nicht dasselbe tun. – Parand
fängt die StopIteration relativ zu ihrer iterablen, nicht zu anderen solchen Objekten in ihrer Suite ab. Zum Beispiel c = iter (Bereich (5)) für i im Bereich (10): \t Druck i, c.next() die StopIteration Ausnahme relativ zu c erhöhen. – Mapio
Eine for-Schleife fängt StopIteration NICHT implizit auf. Es fängt es nur ab, wenn es von der nächsten Methode des Iterators ausgelöst wird, nicht wenn es in den Schleifenkörper geworfen wird. In Ihrer Frage entspricht csvreader.next() dem Schleifenkörper. – Miles