1

我在 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 异常。无论代码使用我的迭代器,我是否需要做任何特别的事情来传播这个异常?或者这会自动发生,导致我的迭代器正确终止。

4

3 回答 3

1

在这种情况下,StopIteration异常将被传播。

于 2011-02-18T09:12:30.193 回答
1

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

但是,是的,StopIteration 异常并不特殊,并且会传播,直到有东西将它们困住。next() 方法不会捕获它们,并且 self.inner_iterator.next() 将在没有任何东西可以迭代时引发 StopIteration。

于 2011-02-18T09:42:43.660 回答
1

您不必做任何特别的事情 -StopIteration异常会自动传播。

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

于 2011-02-18T11:28:51.777 回答