Исключение Python в предложении finally использует предыдущие исключения

В моем реальном случае Segmentation fault возникает в finally пункт, с которым я ничего не могу поделать, потому что он происходит от внешней библиотеки, используемой через ctypes. На самом деле, я не беспокоюсь об этом segfault, потому что сценарий в любом случае выполняется.

Тем не менее, segfault в конечном итоге съедает все исключения, возникающие до него. Таким образом, отладка этого первого 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 ответ

Решение

Вы можете попытаться отловить исключения до того, как вы наконец:

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 прав: ошибка сегментации не является исключением, поэтому вы можете искать что-то еще.

Другие вопросы по тегам