python迭代器异常



我过去了解到,当程序中有不正常的情况时,应该触发异常。例如,读取文件时发生错误。如果您查看此Python代码,您将看到停止异常。但这不是该程序的不正常行为。所以我的问题是:在这种情况下,我们应该提出一个例外吗?谢谢

class MyIterator():
    def __init__(self, n):
        self.max = n
    def __iter__(self):
        self.count = 0
        return self
    # For Python3
    def __next__(self):
        if self.count == self.max:
            raise StopIteration
        self.count += 1
        return self.count - 1
c = MyIterator(4)
for i in c:
   print(i)

是。您不仅应该在这里提出例外,而且您必须在这里提出一个例外。这是迭代器协议所要求的:

iterator.__next__()

从容器中返回下一个项目。如果没有其他项目,请提高StopIteration异常。[...]

您是正确的,因为该程序处于特殊状态时应该提高例外情况(是的,我知道这听起来很冗余)。但是,Python的例外与大多数语言不同。Python中的例外用于核心语言特征,例如迭代,并且优于条件语句。python中的常见习语是"要求外国人更容易而不是允许":

比许可更容易寻求宽恕。这种常见的Python编码样式假定存在有效键或属性,如果假设证明是错误的,则会发现异常。这种干净而快速的样式的特征是许多尝试和语句的存在。该技术与许多其他语言(例如c。

)共有的LBYL风格形成鲜明对比

try语句也被罚款,以允许用户控制如何处理异常。它允许elsefinally和多个except Clasues与它共轭。

是的,绝对。当self.count等于self.max时,停止的异常需要提高以发出信号,这意味着没有更多的元素。查看Python的迭代文档

如果流中没有更多元素, next ()必须提高 停止异常。

最新更新