[Python-de] Micropython - Exception nachträglich ermitteln

Stefan Schwarzer sschwarzer at sschwarzer.net
Mo Jul 2 09:10:42 EDT 2018


On 2018-07-02 13:07, Michael S. wrote:
> habe hier einen ESP8266 mit Micropython am Laufen. Der läuft 24h und 
> sendet zyklisch Daten an einen Webserver. Gelegentlich (Tage bis Wochen) 
> passiert es, das das Python-Script vermutlich mit einer Exception 
> abstürzt. Wenn ich dann mit WebREPL draufschaue sehe ich, dass die 
> Konsole funktional ist.
> Das bedeutet:
> 1. Es hat kein Reboot stattgefunden, denn dann wäre das
>     Script über den Autostart neu gestartet worden.
> 2. Das Script wurde vermutlich durch eine Exception beendet.
> 
> Die mir bekannten kritischen Dinge (Netzwerk) habe ich schon mit 
> Try/Except abgefangen. Trotzdem bricht das Skript ab.
> 
> Wie bekomme ich raus, was das für eine Exception war? Ich kann schlecht 
> wochenlang ein Notebook mit RS232 durchlaufen lassen, um da mitzuhören.

ich habe keine Erfahrung mit MicroPython, aber sonst ist
das übliche Vorgehen, auf der obersten Aufrufebene ein
try/except zu verwenden und im Fehlerfall die Exception
(evtl. mit weiteren Informationen) zu loggen.

Also in etwa:

import logging


def main():
    ...


if __name__ == "__main__":
    # Set up logging.
    log = logging.getLogger()
    ...
    try:
        main()
    except Exception:
        log.exception("ggf. zusätzlicher Text")
    logging.shutdown()

"Netzwerkfehler" lassen sich manchmal schwer abfangen, weil
sie in ganz verschiedenen Exceptions resultieren können (bspw.
Low-Level-Socketfehler oder Fehler auf Anwendungsprotokoll-
Ebene). In dem Fall ist es für die Fehleranalyse hilfreich,
wie oben lieber zu viel als zu wenig abzufangen und zu loggen.

Viele Grüße
Stefan


Mehr Informationen über die Mailingliste python-de