[Tutor PyCZ] handlovani erroru
geon
geon na post.cz
Pátek Červenec 22 18:41:19 CEST 2005
rajcze wrote:
>tak sem to nakonec vymyslel :)
>diky za nakopnuti smerem k modulu traceback - to bylo presne to co sem
>potreboval
>zkusim to teda dat na wiki, jak si rikal
>diky za pomoc
> josef skladanka
>
>
>import sys,traceback
>
>def get_exception():
> exc=sys.exc_info()
> sys.exc_clear()
> ex_type=exc[0]
> ex_fault=exc[1]
> ex_trace_all=traceback.extract_tb(exc[2])
> ex_str='Traceback (most recent call last):\n'
> for ex_trace in ex_trace_all:
> ex_str+=' File "'+ex_trace[0]+'", line '+str(ex_trace[1])+', in
>'+ex_trace[2]+'\n'
> ex_str+=' '+ex_trace[3]+'\n'
> ex_str+=str(ex_type)+': '+str(ex_fault)
> return ex_str
>
>try:
> print "6"+4 # chyba
>except:
> variable=get_exception()
> print variable
>
>
>------------------------------------------------------------------------
>
Cestou do krámu jsem na to myslel a říkal jsem si, jestli by to nešlo
nějak jednodušeji......Pořád jsem myslel taky na ten příklad u traceback
v nápovědě. A pak mi to došlo! Python umí, místo file používat file-like
objekt. Prostě objekt, který se jen jako file tváří, ve stkutečnoti však
vše ukládá do RAM.
Už jsem vlastně psal, že to může být jakákoliv třída, která má min.
metodu write, i jsem posílal příklad. Python má jednu takovou již
zabudovanou a ten modul se jmenuje StringIO. Použití je jako u souboru:
import StringIO
skoroSoubor=StringIO.StringIO()
skoroSoubor.write('ahoj\n')
skoroSoubor.write('jak se mas?')
print skoroSoubor.tell()
dopis=skoroSoubor.getvalue()
print dopis
Má všechny metody jako file a ještě navíc getvalue(). A to se nám přesně
hodí. Takže potom se za použití vysokourovnove funkce
traceback.print_exc() zjednodušuje funkce na toto (v duchu ukázky z
nápovědy k traceback):
import traceback, StringIO
def get_exception():
vyjimka=StringIO.StringIO() # vytvorime file-like objekt
vyjimka.write("Exception in user code:\n")
traceback.print_exc(file=vyjimka) # kvuli teto funkci jsme to vse
delali
vyjimka.write('-'*60)
x=vyjimka.getvalue() # zapis hodnoty do x, abychom ....
vyjimka.close() # ...mohli uvolnit pamet
return x
try:
print "6"+4 # chyba
except:
variable=get_exception()
print variable
Měj se!
P.S. Stejně si myslím, že to jde ještě jednodušeji .....;-)
--
geon
Vyjímka je pravidlo. Rekurzivní.
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://www.py.cz/pipermail/tutor/attachments/20050722/b82daf06/attachment.htm
Další informace o konferenci Tutor