在查看Stackoverflow时 - 关于何时引发异常以及何时在Python函数中简单地返回None
的问题,新出现的图片是您应该使用异常来表示意外行为,否则返回None
。 / p>
然而,迭代的for循环是通过StopIteration
方法引发的next()
异常实现的,尽管最终到达迭代的“结尾”通常并不意外。为什么for循环迭代迭代实现的方式是什么?
答案 0 :(得分:5)
总的答案是你不能使用sentinel值来安全地声明迭代器/生成器的结束。想象一下,您有一个None
个对象的列表,None
不能再用作标记值。这就是使用StopIteration
的原因:没有哨兵价值,避免了问题。
如果您想避免此行为并在next
中返回默认值,则只需致电next(generator, None)
。