我在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 迭代器的任何代码,我是否需要做任何特殊的事情来传播此异常?或者这会自动发生,从而导致我的迭代器正确终止。
答案 0 :(得分:1)
在这种情况下,将传播StopIteration
例外。
答案 1 :(得分:1)
尝试时发生了什么? : - )
但是,是的,StopIteration异常不是特殊的,并且会传播直到陷阱。 next()方法不会捕获它们,当没有任何东西需要迭代时,self.inner_iterator.next()将引发一个StopIteration。
答案 2 :(得分:1)
您无需执行任何特殊操作 - StopIteration
例外情况将自动进行。
此外 - 您可能想要了解yield
关键字 - 它简化了很多生成器/迭代器的创建。