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