Метод
__exit__
magi c не такой, как вы думаете. Он не предназначен для вызова перед завершением вашей программы, но перед тем, как вы покинете блок with. Здесь для более подробной информации об этом.
По сути, у вас не может быть метода, который автоматически вызывается при завершении процесса. Приходится вызывать вручную. Но это все еще возможно. Где-то, предположительно в своей основной функции, вы можете поместить оператор try, чтобы перехватить любое исключение, созданное любой частью вашего приложения (обратите внимание, что sys.exit()
вызывает исключение SystemExit
, которое будет перехвачено, как и другие исключения), и добавить предложение finally в блоке try, в котором вы вызываете все методы, которые требуются при завершении вашей программы. Пример:
def main():
try:
do_thing()
except:
log_error()
finally:
call_methods()
Не забудьте реализовать функцию log_error
(или использовать любую существующую), иначе отладка будет сложной sh.