为什么我不能在捕获StopIteration时突破循环?

时间:2012-12-13 13:48:44

标签: python exception for-loop

我需要捕获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')

这不起作用,在数字耗尽后,我得到一个无限循环。我做错了什么?

1 个答案:

答案 0 :(得分:2)

事实证明StopIteration实际上是Exception的子类,而不仅仅是另一个可抛出的类。因此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') 处理程序放在最上面:

{{1}}