Modul atexit

Tento modul tedy vám tedy umožňuje specifikovat, jaké funkce se vykonají před tím, než se interpretr ukončí. Může se jednat například o uzavření souboru, skončení připojení k databázi, nebo prostě vypsat pozdrav na rozloučenou.

import atexit, sys
def konec(r):
    print r
atexit.register(konec, "Konec programu")
sys.exit([1])

Menší nevýhodou tohoto modulu je, že zadaná funkce se nezavolá tehdy, když python zaregistruje fatální interní chybu, nebo když dojde k ukončení pomocí os._exit.

Jedná se o alternativu k sys.exitfunc, nicméně je doporučováno používat spíše atexit, protože interpretr pravděpodobně nebude pracovat správně, pokud použijete sys.exitfunc a atexit.register dohromady. A protože některé moduly atexit používají, je doporučeno používat ho i ve svých programech na místo sys.exitfunc.

Pomocí tohoto modulu se dá například pozdržet skončení programu:

import atexit, sys
def konec():
    raise NameError
    raw_input()
atexit.register(konec)
sys.exit([1])

K řádku, na kterém je raw_input() se interpretr nedostal, protože byla vyvolána výjimka a nebyla ošetřena.

import atexit, sys, os
def konec():
    try:
        raise NameError
    except:
        print u"Chyba byla úspěšně zpracována\nStistněte Enter k ukončení programu"
        raw_input()
atexit.register(konec)
sys.exit([1])

Tento modul dovoluje zaregistrovat více ukončovacích funkcí. Jakmile dojde k ukončení programu, jsou tyto funkce zavolány v pořadí LIFO (last in, first out).