Сообщить об ошибке.

Обработчики завершения программы

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

Модуль atexit запускает эти функции в обратном порядке, в котором они были зарегистрированы. Если вы зарегистрируете A, B и C, во время завершения работы программы они будут выполняться в порядке C, B, A.

Примечание: функции, зарегистрированные через этот модуль, не вызываются, когда программа прерывается сигналом, не обработанным Python, когда обнаружена фатальная внутренняя ошибка Python или когда вызывается os._exit().

Примеры:

Пример демонстрирует, как модуль может инициализировать счетчик из файла, когда он импортируется и автоматически сохранять обновленное значение счетчика, когда программа завершает работу, не полагаясь на то, что приложение делает явный вызов в этот модуль при завершении.

import atexit

try:
    with open("counterfile") as infile:
        _count = int(infile.read())
except FileNotFoundError:
    _count = 0

def incrcounter(n):
    global _count
    _count = _count + n

def savecounter():
    with open("counterfile", "w") as outfile:
        outfile.write("%d" % _count)

import atexit
atexit.register(savecounter)

Позиционные и ключевые аргументы также могут быть переданы в atexit.register() для передачи зарегистрированной функции при ее вызове:

def goodbye(name, adjective):
    print('Goodbye, %s, it was %s to meet you.' % (name, adjective))

import atexit
atexit.register(goodbye, 'Donny', 'nice')

# или

atexit.register(goodbye, adjective='nice', name='Donny')

Использование в качестве декоратора.

import atexit

@atexit.register
def goodbye():
    print("You are now leaving the Python sector.")

функция atexit.register() в качестве декоратора работает только с функциями, которые можно вызывать без аргументов.