finally子句中的Python异常会占用先前的异常

时间:2013-02-27 00:41:54

标签: python exception finally try-finally try-except

在我的实际案例中,Segmentation fault条款中出现finally,我无法做任何事情,因为它源于通过ctypes使用的外部库。实际上,我并不关心这个段错误,因为无论如何都要完成脚本。

但是,最终的段错误会在它之前发生所有异常。因此,从NameError调试第一个iDontExist会成为屁股的痛苦。它不会发生在任何地方。目前,在segfault之前无法看到任何引发的异常。

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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是对的:分段错误也不例外,所以你可能正在寻找别的东西。