简述
在finally子句中,是否有可能发现是否存在未处理的异常?
背景
我想遍历项目并对它们进行一些相对昂贵的处理,这可能会中断并引发异常。因此,我想保存我的位置。 但是,保存状态也很昂贵 - 因此我不想每次都这样做,只有在代码中出现异常时才保存。
我想象中的形式大致如下:
def get_things(my_iterator):
for items in my_iterator:
try:
yield item
finally:
if something_went_wrong(): # magic oracle function for failure
save_state(item)
continue_normal_processing()
但我不知道这是否可行。值得注意的是,except Exception:
没有引发任何异常,因为该异常不在此函数中。
try:
/finally:
不是正确的方法;这里没有需要尝试的内容。 - Martijn Pietersyield
如何引发异常?如果在生成下一个项时发生异常,那不是循环已经引发了异常吗?另外,为什么不直接使用except
而非finally
? - tobias_kmy_iterator
是否是异常的来源? - Martijn Pieters