编程语言
首页 > 编程语言> > finally子句中的Python异常会吃掉之前的异常

finally子句中的Python异常会吃掉之前的异常

作者:互联网

在我的实际情况下,finally子句出现了Segmentation错误,我对此无能为力,因为它源自通过ctypes使用的外部库.实际上,我不关心此段错误,因为脚本还是已完成.

但是,finally中的段错误会吞噬之前发生的所有异常.因此,从iDontExist调试该第一个NameError变得麻烦.它不会在任何地方发生.当前,无法从segfault之前看到任何引发的异常.

def f1():
    try:
        while True:
            pass
    except KeyboardInterrupt:
        print iDontExist

if __name__=="__main__":
    try:
        f1()
    finally:
        raise Exception("segfault here")
        print "finally"

您认为我能做些什么?修复外部库不是一种选择.

解决方法:

您可以尝试在最终之前捕获异常:

try:
    f1()
except NameError as error:  # Change as needed
    print "Error caught:", error  # Or simply "raise", in order to raise the error caught
finally:
    raise Exception("segfault here")
    print "finally"

也就是说,abamert是正确的:细分错误也不例外,因此您可能正在寻找其他东西.

标签:try-finally,exception,try-except,finally,python
来源: https://codeday.me/bug/20191031/1973984.html