为什么Python使用异常来管理迭代器,为什么不使用';不是其他语言吗?

为什么Python使用异常来管理迭代器,为什么不使用';不是其他语言吗?,python,iterator,language-design,python-internals,Python,Iterator,Language Design,Python Internals,在Java中,迭代器有一个hasNext()方法(如果我没记错的话——我已经很久没有用Java编程了,所以细节可能不清楚)。在遍历迭代器时,可以查询hasNext(),查看是否应该停止 在Python中,没有hasNext(),迭代器在想要发出您应该停止的信号时会引发StopIteration异常。为什么不同 我可以想象,不需要hasNext()对实现迭代器的人来说工作更少;在这种情况下,为什么Java和其他语言使用它?这是一种哲学上的差异,还是由于某种原因,Python中的异常更容易/更快?S

在Java中,迭代器有一个
hasNext()
方法(如果我没记错的话——我已经很久没有用Java编程了,所以细节可能不清楚)。在遍历迭代器时,可以查询
hasNext()
,查看是否应该停止

在Python中,没有
hasNext()
,迭代器在想要发出您应该停止的信号时会引发
StopIteration
异常。为什么不同


我可以想象,不需要hasNext()对实现迭代器的人来说工作更少;在这种情况下,为什么Java和其他语言使用它?这是一种哲学上的差异,还是由于某种原因,Python中的异常更容易/更快?

StopIteration
更常用于生成器(关键字
yield
)而不是迭代器。生成器使用异常向调用方指示序列已用尽

此外,利用异常是python语言的一个常见习语。一个很好的例子是检测浮点数字符串。在python中通常是这样编写的:

def is_float(in_num):
    try:
        float(in_num)
        return true
    except ValueError:
        return false

相关:@ajcr:谢谢!在将来,我将首先考虑程序员的这些问题。我觉得,这个问题不是当前标记为的问题的副本,而是您链接中问题的副本(我现在开悟了)。我们能为子孙后代改变它吗?我投票把这个问题作为离题题来结束,因为它是关于语言设计的,更适合(和)程序员。我的印象是,每个迭代器在元素不足时都会引发
StopIteration
。例如,如果执行
it=iter('abc');下一步(it);下一步(it);下一步(it);接下来(它)
您将得到一个
StopIteration
。请求原谅很有道理,我没有考虑过。