我有一个定义迭代器接口的对象,还包含一个内置文件阅读器(并使用其迭代器接口,如下所示)
class MyIter(object):
def __init__(path):
self.file = open(path, "r")
def next(self):
line = self.file.next()
return line
def __iter__(self):
return self
我称之为:
r = MyIter("path_to_file")
for item in r:
print item
这会将整个文件打印到最后一行。我的问题是我从来没有为EOF添加任何检查或检查返回行的长度以指定一些结束条件。为什么这样做?
答案 0 :(得分:5)
next()
方法返回下一个输入行,或者在达到EOF时引发StopIteration
。因此它会自动处理EOF限制。
答案 1 :(得分:4)
您的下一个实现会调用file.next()
,它有自己的EOF检查。 "此方法返回下一个输入行,或者当文件打开以供阅读时按下EOF时引发StopIteration"
答案 2 :(得分:2)
我不是Python专家,但你应该引用" item"在for?
for item in r:
print "item ==> ", item
但是,是的,next()方法正在为你提高StopIteration。