Je voudrais lire 20 lignes à partir d'un fichier csv:Python: exception StopIteration et liste compréhensions
rows = [csvreader.next() for i in range(20)]
fonctionne très bien si le fichier a 20 ou plusieurs lignes, échoue avec une exception StopIteration autrement.
Existe-t-il une manière élégante de traiter un itérateur qui pourrait lancer une exception StopIteration dans une liste de compréhension ou devrais-je utiliser une boucle for normale?
Merci Ayman. Il semble que la compréhension des listes doive être mise à jour pour faire face à StopIteration, non? Il semble que "for" a déjà été mis à jour pour y faire face (il arrête d'itérer quand il rencontre l'exception, l'attrape implicitement), et je ne vois pas de raison évidente pour que la compréhension des listes ne fasse pas la même chose. – Parand
pour attraper le StopIteration par rapport à son itérable, pas à d'autres tels objets dans sa suite. Par exemple c = iter (plage (5)) pour i dans la plage (10): \t impression i, c.next() soulèvera l'exception StopIteration par rapport à c. – Mapio
Une boucle for n'attrape PAS implicitement StopIteration. Elle ne l'attrape que si elle est lancée par la méthode suivante de l'itérateur, et non si elle est lancée dans le corps de la boucle. Dans votre question, csvreader.next() est analogue au corps de la boucle. – Miles