Seite 1 von 1
Skriptfehler generell abfangen und behandeln ...
Verfasst: Samstag 19. August 2017, 16:53
von drnicolas
Momentan fange ich eine ganze Reihe von Fehlern in meinem Skript jeweils ab, indem ich die Anweisung mit Try: kapsele. Es wird dann jeweils der Inhalt einer Log-Datei per Mail verschickt. Die Meldungen werden mit log.debug oder log.info erfasst
Die Fehler betreffen dadurch natürlich immer konkret eine spezielle Anweisung
Ist es auch möglich generelle Fehler, z.B. sogar Syntax-Fehler abzufangen und den Fehlertext ebenfalls in eine Logdatei zu leiten und dann zu mailen?
Re: Skriptfehler generell abfangen und behandeln ...
Verfasst: Samstag 19. August 2017, 17:09
von Sirius3
@drnicolas: generell kann man alle Fehler abfangen, bis auf SyntaxFehler, denn die Entstehen schon beim Compilieren, so dass gar kein Code ausgeführt wird.
Re: Skriptfehler generell abfangen und behandeln ...
Verfasst: Samstag 19. August 2017, 17:14
von drnicolas
Oaky. Dann macht das nur Sinn in jedem Fall die Log-Datei per Mail zu schicken
Re: Skriptfehler generell abfangen und behandeln ...
Verfasst: Samstag 19. August 2017, 19:13
von DeaD_EyE
Die Fehler könnte man abfangen. Man muss halt wissen, dass beim Import eines Moduls der komplette Code einmal durch den Parser läuft und in ByteCode übersetzt wird und danach wird er sogar ausgeführt. Beim Import könnte man den Fehler abfangen:
Code: Alles auswählen
try:
import foo
except SyntaxError:
print('Module Foo has a syntax error')
Wenn man sich solche Konstrukte in sein Programm einbaut, macht man aber was gewaltig falsch.
Will man sein Programm testen, sollte man unittest oder vergleichbares einsetzen. Das hat noch den Vorteil,
dass man nicht nur syntaktische Fehler sofort präsentiert bekommt, vielmehr testet man Funktionen seines Codes
auf Richtigkeit.
Re: Skriptfehler generell abfangen und behandeln ...
Verfasst: Samstag 19. August 2017, 20:34
von noisefloor
Hallo,
Die Fehler könnte man abfangen.
Nee - auch bei diesem Ansatz hast du mindestens ein Python-Skript, was Syntaxfehler enthalten könnten, aber in keinem try...except Block stehen kann
Gruß, noisefloor
Re: Skriptfehler generell abfangen und behandeln ...
Verfasst: Samstag 19. August 2017, 21:41
von pixewakb
drnicolas hat geschrieben:Momentan fange ich eine ganze Reihe von Fehlern in meinem Skript jeweils ab, indem ich die Anweisung mit Try: kapsele. Es wird dann jeweils der Inhalt einer Log-Datei per Mail verschickt. Die Meldungen werden mit log.debug oder log.info erfasst
Irgendwie erscheint mir das sehr falsch.
Erstens gibt es 5 Stufen und bei einem Fehler würde ich auch eine Fehlermeldung (logging.error()) und hier speziell mittels logging.exception() absetzen. Wenn Du später mal die Stufe, ab der Meldungen abgesetzt werden, hochschraubst, bekommst Du von den Fehlern nichts mehr mit. Bei einem Fehler möchte ich schon gerne sehen, woran es gescheitert ist.
Logger.exception(msg, *args, **kwargs)
Logs a message with level ERROR on this logger. The arguments are interpreted as for debug(). Exception info is added to the logging message. This method should only be called from an exception handler.
Code: Alles auswählen
>>> import logging
>>> try:
1 / 0
except ZeroDivisionError:
logging.exception("War was falsch...")
ERROR:root:War was falsch...
Traceback (most recent call last):
File "<pyshell#5>", line 2, in <module>
ZeroDivisionError: division by zero
Das ist der zweite Punkt: Eigentlich sollten Fehler nicht gekapselt werden, sondern im Idealfall aus dem Programmtext ausgemerzt werden. Dass ich Fehler behandeln muss, kommt eher selten vor, aber eigentlich immer, wenn ich fremde Daten behandele, die halt auch mal kaputt sein können.
Re: Skriptfehler generell abfangen und behandeln ...
Verfasst: Sonntag 20. August 2017, 09:22
von drnicolas
Das letztere werde ich mal ausprobieren.
Vielen Dank für die zahlreichen Beiträge