首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: StopIteration异常和列表理解

Python: StopIteration异常和列表理解
EN

Stack Overflow用户
提问于 2009-07-09 23:09:56
回答 3查看 5.6K关注 0票数 11

我想从csv文件中读取最多20行:

代码语言:javascript
复制
rows = [csvreader.next() for i in range(20)]

如果文件有20行或更多行,则工作正常,否则会失败,并引发StopIteration异常。

有没有一种优雅的方法来处理可能在列表理解中抛出StopIteration异常的迭代器,或者我应该使用常规的for循环?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-09 23:15:50

您可以使用itertools.islice。它是列表切片的迭代器版本。如果迭代器的元素少于20个,它将返回所有元素。

代码语言:javascript
复制
import itertools
rows = list(itertools.islice(csvreader, 20))
票数 15
EN

Stack Overflow用户

发布于 2009-08-08 01:00:56

itertools.izip (2)提供了一种轻松实现列表理解的方法,但在这种情况下,islice似乎是最佳选择。

代码语言:javascript
复制
from itertools import izip
[row for (row,i) in izip(csvreader, range(20))]
票数 0
EN

Stack Overflow用户

发布于 2009-07-09 23:26:24

如果出于任何原因,您还需要跟踪行号,我建议您:

代码语言:javascript
复制
rows = zip(xrange(20), csvreader)

如果没有,你可以把它去掉,或者...那么,你最好从一开始就尝试其他更好的选择:-)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1106903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档