Как я могу зарегистрировать функцию, которая будет вызываться только при * успешном * завершении моей программы Python?

Я хочу запустить задачу, когда моя программа 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!
7
задан Benjamin 1 December 2013 в 01:45
поделиться