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).