python iterator:为什么这个工作?

时间:2015-10-12 13:49:15

标签: python

我有一个定义迭代器接口的对象,还包含一个内置文件阅读器(并使用其迭代器接口,如下所示)

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添加任何检查或检查返回行的长度以指定一些结束条件。为什么这样做?

3 个答案:

答案 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。