Я хочу запустить задачу, когда моя программа Python завершится, но только если она завершится успешно. Насколько мне известно, использование модуля atexit означает, что моя зарегистрированная функция будет всегда запускаться при завершении программы, независимо от успеха. Есть ли аналогичная функция для регистрации функции, чтобы она запускалась только при успешном выходе? В качестве альтернативы, есть ли способ для моей функции выхода определить, был ли выход нормальным или исключительным?
Вот код, демонстрирующий проблему. Он напечатает, что программа завершилась успешно, даже если она не удалась.
import atexit
def myexitfunc():
print "Program succeeded!"
atexit.register(myexitfunc)
raise Exception("Program failed!")
Вывод:
$ python atexittest.py
Traceback (most recent call last):
File "atexittest.py", line 8, in <module>
raise Exception("Program failed!")
Exception: Program failed!
Program succeeded!