[python] Zdrojový kód z databáze a identifikace chyby

Radek Kaňovský rk na dat.cz
Pondělí Leden 23 09:39:39 CET 2006


On Sun, Jan 22, 2006 at 12:59:30PM -0800, Xeleos wrote:

> Ahoj,
> 
> potřebuji uchovávat zdrojový kód v databázi.  Pouštím ho funkcí
> exec. Když ale dojde k chybě během kódu, tak ve výpisu chyby je:
> File "", line 39, in  ?
> Zajímalo by mě, zda jde zdrojový kód nějak identifikovat, abych si
> mohl nastavit vlastní název (číslo řádky v tabulce), který bych
> pak mohl při odchytávání chyby zpracovat?
> Moc děkuji za pomoc

Tohle jde celkem snadno, pouze se musi zdroj zkompilovat:

    >>> src = '''print 1
    ... 1/0
    ... print 2
    ... '''
    >>> code = compile(src, '<tabulka:klic>', 'exec')
    >>> exec code
    1
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
      File "<tabulka:klic>", line 2, in ?
    ZeroDivisionError: integer division or modulo by zero

Zde je videt, ze se neco stalo v zaznamu s primarnim klicem "klic" v
tabulce "tabulka". Pokud byste chtel vypsat i ten konkretni radek
databazoveho zaznamu, na kterem se chyba vyskytla (tj. "1/0"),
tak to pujde mozna nejak pres vlastni funkci nastavenou do sys.excepthook.
Ted se misto "1/0" zobrazuje otaznik, protoze standardni exception
handler umi hledat zdrojove kody pouze v souborech.

Zdravi

Radek Kaňovský



Další informace o konferenci Python