Quiero ejecutar una tarea cuando finaliza mi programa Python, pero solo si finaliza correctamente. Por lo que yo sé, el uso del módulo atexit significa que mi función registrada será siempre se ejecutará en la terminación del programa, independientemente de su éxito. ¿Existe una funcionalidad similar para registrar una función para que solo se ejecute al salir con éxito? Alternativamente, ¿hay alguna manera para que mi función de salida detecte si la salida fue normal o excepcional?¿Cómo puedo registrar una función para que solo se llame a la salida * successful * de mi programa Python?
Aquí hay algunos códigos que demuestran el problema. Imprimirá que el programa tuvo éxito, incluso cuando falló.
import atexit
def myexitfunc():
print "Program succeeded!"
atexit.register(myexitfunc)
raise Exception("Program failed!")
Salida:
$ python atexittest.py
Traceback (most recent call last):
File "atexittest.py", line 8, in <module>
raise Exception("Program failed!")
Exception: Program failed!
Program succeeded!
Esta es probablemente la forma más directa de obtener lo que solicité. –