Python: StopIteration异常与列表推导式
我想从一个csv文件中最多读取20行:
rows = [csvreader.next() for i in range(20)]
如果文件有20行或更多,这样做没问题;但如果少于20行,就会出现一个叫做StopIteration的错误。
有没有什么好的方法可以在列表推导式中处理可能会抛出StopIteration错误的迭代器?还是说我应该用普通的for循环呢?
3 个回答
-1
如果出于某种原因你需要记录行号,我建议你这样做:
rows = zip(xrange(20), csvreader)
如果不需要的话,你可以在之后把它去掉,或者……其实你最好从一开始就尝试其他更优的选择 :-)
0
itertools.izip
(2) 提供了一种简单的方法来让列表推导式工作,但在这种情况下,islice
似乎是更好的选择。
from itertools import izip
[row for (row,i) in izip(csvreader, range(20))]
17
你可以使用 itertools.islice
。这个东西是用来处理迭代器的,类似于我们平时用的列表切片。如果这个迭代器里的元素少于20个,它会把所有的元素都返回给你。
import itertools
rows = list(itertools.islice(csvreader, 20))