为什么使用StopIteration Exception实现迭代的结束

时间:2017-10-31 17:41:44

标签: python exception error-handling iterator

在查看Stackoverflow时 - 关于何时引发异常以及何时在Python函数中简单地返回None的问题,新出现的图片是您应该使用异常来表示意外行为,否则返回None。 / p>

然而,迭代的for循环是通过StopIteration方法引发的next()异常实现的,尽管最终到达迭代的“结尾”通常并不意外。为什么for循环迭代迭代实现的方式是什么?

1 个答案:

答案 0 :(得分:5)

总的答案是你不能使用sentinel值来安全地声明迭代器/生成器的结束。想象一下,您有一个None个对象的列表,None不能再用作标记值。这就是使用StopIteration的原因:没有哨兵价值,避免了问题。

如果您想避免此行为并在next中返回默认值,则只需致电next(generator, None)