Edit detail for atexit revision 1 of 1

1
Editor: blujacker
Time: 2008/05/28 14:24:44 GMT+2
Note:

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

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