我需要捕获next(it)引发的异常,因此在这种情况下不能使用常规的for循环。所以我写了这段代码:

it = iter(xrange(5))
while True:
    try:
        num = it.next()
        print(num)
    except Exception as e:
        print(e) # log and ignore
    except StopIteration:
        break
print('finished')


这是行不通的,在数字用完之后,我得到一个无限循环。我究竟做错了什么?

最佳答案

事实证明,StopIteration实际上是Exception的子类,而不仅仅是另一个throwable类。因此,从未调用过StopIteration处理程序,因为StopIterationException的处理程序来处理。我只需要将StopIteration处理程序放在顶部:

it = iter(xrange(5))
while True:
    try:
        num = it.next()
        print(num)
    except StopIteration:
        break
    except Exception as e:
        print(e) # log and ignore
print('finished')

10-01 19:18