The module atexit allows registering hooks that will be executed when the program terminates.
There are only a few cases when it is NOT executed:
os._exit(don't confuse with
sys.exit) is called.
- When the interpreter failed with a fatal error.
- When the process is hard-killed. For example, someone executed kill -9 or the system is ran out of memory.
In all other cases, like an unhandled exception or
sys.exit, the registered hooks will be executed.
A few use cases:
- Finish pending jobs
- Send pending log messages into the log system
- Save interactive interpreter history
However, keep in mind that there is no way to handle unhandled exceptions using
atexit because it is executed after the exception is printed and discarded.
import atexit atexit.register(print, 'FINISHED') 1/0
Traceback (most recent call last): File "example.py", line 4, in <module> 1/0 ZeroDivisionError: division by zero FINISHED