3

在我的真实情况下,aSegmentation fault出现在finally我无能为力的子句中,因为它源于通过 ctypes 使用的外部库。实际上,我并不关心这个段错误,因为脚本无论如何都完成了。

但是,finally 中的段错误会吃掉之前发生的所有异常。因此,首先NameError从调试开始iDontExist变得很痛苦。它不会在任何地方发生。目前没有办法看到在段错误之前引发的任何异常。

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

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

你觉得我能做些什么呢?修复外部库不是一种选择。

4

1 回答 1

4

您可以尝试在 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 是对的:分段错误也不例外,因此您可能正在寻找其他东西。

于 2013-02-27T00:47:19.867 回答