Python StopIteration异常是否会通过我的迭代器自动向上传播?
我正在Python中实现一个迭代器,它围绕另一个迭代器进行封装,并在传递迭代器输出之前对其进行后期处理。下面是一个简单的示例,它使用一个迭代器,将MYITER:筛选的字符串和前缀返回给每个迭代器:Python StopIteration异常是否会通过我的迭代器自动向上传播?,python,iterator,termination,Python,Iterator,Termination,我正在Python中实现一个迭代器,它围绕另一个迭代器进行封装,并在传递迭代器输出之前对其进行后期处理。下面是一个简单的示例,它使用一个迭代器,将MYITER:筛选的字符串和前缀返回给每个迭代器: class MyIter(object): """A filter for an iterator that returns strings.""" def __init__(self, string_iterator): self.inner_iterator = s
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异常。我是否需要做一些特殊的事情来将这个异常传播到使用迭代器的任何代码中?或者这会自动发生,导致我的迭代器正确终止。在这种情况下,将传播
StopIteration
异常。尝试时发生了什么?:-)
但是,是的,StopIteration异常并不特殊,它会一直传播,直到有什么东西将其捕获。next()方法不会捕获它们,self.internal_iterator.next()将在没有剩余迭代时引发StopIteration。您不必做任何特殊的操作-将自动传播
StopIteration
异常
此外,您可能想了解
yield
关键字-它大大简化了生成器/迭代器的创建。非常好,我刚刚了解到我可以在类的\iter\uuu
方法中使用yield
和生成器表达式。我不知道如何在一个iterable类中使用这些。