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

Michael S. michaely at bigfoot.de
Mo Jul 2 09:25:02 EDT 2018


Am 02.07.2018 um 15:10 schrieb Stefan Schwarzer:
> 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.

Eigentlich mache ich das und habe um die Netzwerk-Sache ein Try/Except 
außenrum gesetzt.
Es ist halt kein Linux dahinter. z.B. könnte auch RAM-Mangel der Grund 
sein und dann kann auch ein Versuch, ne Datei zu schreiben, schief gehen.

Da ich nach der Exception ja auf der Console bin und da arbeiten kann: 
Kann ich die letzte Exception nochmal abfragen? Merkt sich das ein 
normales Python?

-- 
Michael


Mehr Informationen über die Mailingliste python-de