Как обработать завершение процесса во всех случаях?
Есть ли в Python 3.8 некая переопределяемая системная функция (или что-то схожее) ,которая вызывается при выходе из программы будь то Exeption или просто конец программы. И можно ли самому при выходе из ядра родительского процесса перед самым концом запустить функцию которая выполнит мои инструкции.
Ответы (1 шт):
Недавно узнал о таком модуле как 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
, но как по мне это не так элегантно как первые два варианта.