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

2024-06-28 19:47:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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异常。我需要做什么特殊的事情来传播这个异常吗?不管代码使用的是我的迭代器?或者这会自动发生,导致迭代器的正确终止。在


Tags: 字符串self示例stringbyreturnobjectdef
3条回答

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

你试过的时候发生了什么?:-)

但是是的,StopIteration异常并不是特殊的,它会一直传播,直到有东西捕获它们。next()方法不捕获它们,并且self.inner_迭代器.next()将在没有要迭代的内容时引发StopIteration。在

您不必做任何特殊的操作,StopIteration异常将被自动传播。在

此外,您可能需要阅读yield关键字,它大大简化了生成器/迭代器的创建。在

相关问题 更多 >