StopIteration异常是否会通过我的迭代器自动向上传播?

时间:2011-02-18 08:28:20

标签: python iterator termination

我在Python中实现了一个迭代器,它包装了另一个迭代器,并在传递之前对迭代器的输出进行后处理。这是一个简单的例子,它带有一个迭代器,它返回字符串并在每个字符串前面添加FILTERED BY MYITER:

class MyIter(object):
    """A filter for an iterator that returns strings."""
    def __init__(self, string_iterator):
        self.inner_iterator = string_iterator
    def __iter__(self):
        return self
    def next(self):
        return "FILTERED BY MYITER: " + self.inner_iterator.next()

当内部迭代器完成时,它将引发StopIteration异常。无论使用 my 迭代器的任何代码,我是否需要做任何特殊的事情来传播此异常?或者这会自动发生,从而导致我的迭代器正确终止。

3 个答案:

答案 0 :(得分:1)

在这种情况下,将传播StopIteration例外。

答案 1 :(得分:1)

尝试时发生了什么? : - )

但是,是的,StopIteration异常不是特殊的,并且会传播直到陷阱。 next()方法不会捕获它们,当没有任何东西需要迭代时,self.inner_iterator.next()将引发一个StopIteration。

答案 2 :(得分:1)

您无需执行任何特殊操作 - StopIteration例外情况将自动进行。

此外 - 您可能想要了解yield关键字 - 它简化了很多生成器/迭代器的创建。