我需要捕获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')
这不起作用,在数字耗尽后,我得到一个无限循环。我做错了什么?
答案 0 :(得分:2)
事实证明StopIteration
实际上是Exception
的子类,而不仅仅是另一个可抛出的类。因此StopIteration
处理程序从未被调用,因为StopIteration
由Exception
处理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}}