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