bin sehr begeistert von python und wollte fragen wie es denn eigentlich mit dem try aussieht. hab grad ein kleines programm geschrieben und überall dort wo ein fehler auftrag ein
Code: Alles auswählen
try:
code
except:
pass
mfg blan
Code: Alles auswählen
try:
code
except:
pass
Überall Fehler abzufangen ist selten gut. So kann man evtl., wenn man es etwas übertreibt später bestimmte Fehler nicht mehr finden.eingebaut - evtl. noch ein bestimmtes Error abgefangen. da ich noch nie mit try garbeitet habe wollt ich fragen ob das ein guter oder eher schlechter stil is zu programmieren.
Code: Alles auswählen
import traceback
import string
import sys
def dothis():
try:
return [1,""]
except:
return [0,string.join(traceback.format_exception(sys.exc_type,sys.exc_value,sys.exc_traceback))]
Dass du loggen möchtest, ist verständlich, aber warum machst du da so ein gemurkse über rückgabewerte?Der Gedanke wenn die Function dothis()[0] gleich 1 ist hat alles geklappt und ich brauche mir keine sorgen machen. Wenn es aber 0 ist dann sollte ich dothis()[1] (die error message) zusammen mit Datum und Uhrzeit in ein Errorlog schreiben.
Code: Alles auswählen
all_ok, message = dothis()
if not all_ok:
log(message)
Code: Alles auswählen
try:
dothis()
except:
log(tracebackkrams)
tut es aber nicht ich rufe dothis() über import auf und wenn ein error passiert müssen noch ein paar andere sachen geamcht werden ersteinmal muss dafür gesorgt werden das dieser schritt nicht wieder gemacht wird bis ein admin sich die Fehlermeldung angeshcaut hat dann wird noch ne mail verschickt damit es schnells möglich jmd bermerkt und dann macht er mit anderne abriet schritten weiter die genau das selbe schmea haben und so läuft das tag und nacht ab ^^zZ müsste der loggende Teil etwa sowas machen:
Code: Alles auswählen
all_ok, message = dothis() if not all_ok: log(message)
also in dem fall ist es so, dass ich ich ein xml-string übers netzwerk gesendet bekomm und den in dem try parsen lasse, wenn der string fehlerhaft ist wird ein error aufgerufen und den fang ich damit ab und mach nichts, irgnorier also das packet.BlackJack hat geschrieben:Wichtig ist auch das man nur ``try``/``except`` an Stellen benutzen sollte wenn man auch wirklich etwas sinnvolles mit der Ausnahme anfangen kann. Wenn nicht dann sollte man es einfach weglassen.
Ich hoffe das ``pass`` im ersten Beitrag war nur ein Platzhalter für eine sinvolle Behandlung. Nichts zu tun kann in einigen Fällen okay sein, aber man sollte sich dann wirklich fragen, ob man die Ausnahme wirklich ignorieren sollte/will.
was genau meinst du damit?tut es aber nicht ich rufe dothis() über import auf
Das steht ja auch gar nicht in Frage. Es ging mir nur um die Übermittlung der Ausnahme, du schaffst dir da extra einen Weg über return, ohne dass das einen Mehrwert erzeugt, imho.und wenn ein error passiert müssen noch ein paar andere sachen geamcht werden [...]
Code: Alles auswählen
try:
d[gibtsnicht] = nichtda
except Exception, e:
print "Fehler:", e
print "und weiter geht's..."
Code: Alles auswählen
import sys, traceback
try:
d[gibtsnicht] = nichtda
except Exception, e:
print "-----[Traceback START]-----"
print traceback.format_exc(sys.exc_info()[2]),
print "-----[Traceback END]-----"
print "und weiter geht's..."