<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-2" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
rajcze wrote:
<blockquote cite="mid63b313040507220558725c5b86@mail.gmail.com"
type="cite">
<pre wrap="">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
</pre>
<pre wrap="">
<hr size="4" width="90%"></pre>
</blockquote>
<br>
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. <br>
<br>
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:<br>
<br>
<tt>import StringIO<br>
<br>
skoroSoubor=StringIO.StringIO()<br>
skoroSoubor.write('ahoj\n')<br>
skoroSoubor.write('jak se mas?')<br>
print skoroSoubor.tell()<br>
dopis=skoroSoubor.getvalue()<br>
print dopis<br>
</tt><br>
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):<br>
<br>
<tt>import traceback, StringIO<br>
<br>
def get_exception():<br>
<br>
vyjimka=StringIO.StringIO() # vytvorime file-like objekt<br>
vyjimka.write("Exception in user code:\n")<br>
traceback.print_exc(file=vyjimka) # kvuli teto funkci jsme to
vse delali<br>
vyjimka.write('-'*60)<br>
x=</tt><tt>vyjimka.getvalue() # zapis hodnoty do x, abychom ....</tt><br>
<tt> vyjimka.close() # ...mohli uvolnit pamet<br>
<br>
return x<br>
<br>
try:<br>
print "6"+4 # chyba<br>
except:<br>
variable=get_exception()<br>
print variable</tt><br>
<br>
Měj se!<br>
<br>
P.S. Stejně si myslím, že to jde ještě jednodušeji .....;-)<br>
<pre class="moz-signature" cols="100">--
geon
Vyjímka je pravidlo. Rekurzivní.
</pre>
</body>
</html>