Frage

Ich habe Setup die Logging-Modul für meinen neuen Python-Skript. Ich habe zwei Handler, ein Material in eine Datei zu senden, und einen für die E-Mail-Benachrichtigungen. Die SMTPHandler ist Setup etwas am ERROR Ebene auf die Post oder höher.

Alles funktioniert gut, es sei denn, die SMTP-Verbindung fehlschlägt. Wenn der SMTP-Server nicht reagiert oder die Authentifizierung fehlschlägt (es erfordert SMTP-Auth), dann ist die ganze Skript stirbt.

Ich bin ziemlich neu in Python, so ich versuche, herauszufinden, wie die Ausnahme zu erfassen, dass die SMTPHandler erzieht so dass alle Probleme, die Log-Nachricht per E-Mail senden, werden nicht mein ganzes Skript bringen. Da ich auch Fehler in eine Log-Datei zu schreiben, wenn die SMTP-Benachrichtigung fehlschlägt, ich will nur weitermachen, nichts zu stoppen.

Wenn ich brauche eine „versuchen:“ Aussage, wäre es der logging.handlers.SMTPHandler Setup umgehen, oder um die einzelnen Anrufe my_logger.error ()

War es hilfreich?

Lösung

Ausnahmen, die während der Aufzeichnung auftreten, sollte das Skript nicht stoppen, obwohl sie eine Rückverfolgung verursachen kann sys.stderr gedruckt werden. Um diesen Ausdruck zu vermeiden, gehen Sie wie folgt vor:

logging.raiseExceptions = 0

Dies ist nicht der Standard (weil in der Entwicklung Sie in der Regel über Ausfälle wissen will), aber in der Produktion, raiseExceptions sollte nicht eingestellt werden.

Sie sollten feststellen, dass der SMTPHandler eine erneute Verbindung das nächste Mal wenn ein Fehler versuchen wird, (oder höher) angemeldet ist.

logging hat SystemExit und KeyboardInterrupt Ausnahmen passieren, aber alle anderen sollten so behandelt werden, dass sie die Protokollierung verwendet keine Beendigung einer Anwendung führen. Wenn Sie feststellen, dass dies nicht der Fall ist, schreibe spezifische Details der Ausnahmen, die durch bekommen und verursachen das Skript zu beenden, und über Ihre Version von Python / Betriebssystem. Beachten Sie, dass das Skript erscheinen hängen, wenn es ein Netzwerk-Timeout, die der Handler zu blockieren verursacht (z, wenn ein DNS-Lookup dauert eine lange Zeit, oder wenn die SMTP-Verbindung dauert eine lange Zeit).

Andere Tipps

Sie müssen wahrscheinlich beides tun. Um dies herauszufinden, schlage ich einen lokalen Mailserver zu installieren und zu verwenden. Auf diese Weise können Sie es heruntergefahren, während das Skript ausgeführt wird und notieren Sie die Fehlermeldung.

Sie den Code wartbar zu halten, sollten Sie sich SMTPHandler so, dass Sie die Ausnahmen in einem einzigen Ort verarbeiten kann (statt jeden Logger Anruf mit try-except der Verpackung).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top