Как обработать завершение процесса во всех случаях?

Есть ли в Python 3.8 некая переопределяемая системная функция (или что-то схожее) ,которая вызывается при выходе из программы будь то Exeption или просто конец программы. И можно ли самому при выходе из ядра родительского процесса перед самым концом запустить функцию которая выполнит мои инструкции.


Ответы (1 шт):

Автор решения: kristal

Недавно узнал о таком модуле как atexit из стандартного набора библиотек python. Использование элементарное:

import atexit


def my_any_func():
    print("bye-bye!")


atexit.register(my_any_func)

Мы всего лишь регистрируем функцию/функции которые хотим выполнить при завершении работы программы и они будут выполнены автоматически когда это произойдёт.

Ещё один вариант через блок try-except-finaly:

if __name__ == '__main__':
    try:
        main()
    finally:
        my_any_func()

Хорошей практикой считается иметь точку входа в приложение, если при этом обернуть её в блок try-except-finaly получим что код в finaly будет обязательно вызываться когда основной скрипт завершит работу.

Ну и ещё один вариант вам подсказали в комментариях: использовать sys.exit() и отлавливать SystemExit, но как по мне это не так элегантно как первые два варианта.

→ Ссылка