Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python StopIteration异常是否会通过我的迭代器自动向上传播?_Python_Iterator_Termination - Fatal编程技术网

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

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

我正在Python中实现一个迭代器,它围绕另一个迭代器进行封装,并在传递迭代器输出之前对其进行后期处理。下面是一个简单的示例,它使用一个迭代器,将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.internal_iterator.next()将在没有剩余迭代时引发StopIteration。

您不必做任何特殊的操作-将自动传播
StopIteration
异常


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

非常好,我刚刚了解到我可以在类的
\iter\uuu
方法中使用
yield
和生成器表达式。我不知道如何在一个iterable类中使用这些。