我用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异常。我需要做什么特殊的事情来传播这个异常吗?不管代码使用的是我的迭代器?或者这会自动发生,导致迭代器的正确终止。在
在这种情况下,
StopIteration
异常将被传播。在你试过的时候发生了什么?:-)
但是是的,StopIteration异常并不是特殊的,它会一直传播,直到有东西捕获它们。next()方法不捕获它们,并且self.inner_迭代器.next()将在没有要迭代的内容时引发StopIteration。在
您不必做任何特殊的操作,
StopIteration
异常将被自动传播。在此外,您可能需要阅读
yield
关键字,它大大简化了生成器/迭代器的创建。在相关问题 更多 >
编程相关推荐