我需要捕获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
处理程序,因为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')