我过去了解到,当程序中有不正常的情况时,应该触发异常。例如,读取文件时发生错误。如果您查看此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
语句也被罚款,以允许用户控制如何处理异常。它允许else
,finally
和多个except
Clasues与它共轭。
是的,绝对。当self.count
等于self.max
时,停止的异常需要提高以发出信号,这意味着没有更多的元素。查看Python的迭代文档
如果流中没有更多元素, next ()必须提高 停止异常。