Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "Michael S." Newsgroups: de.comp.lang.python Subject: =?UTF-8?Q?Re:_[Python-de]_Micropython_-_Exception_nachtr=c3=a4glich?= =?UTF-8?Q?_ermitteln?= Date: Mon, 2 Jul 2018 15:25:02 +0200 Lines: 59 Message-ID: References: <9a003315-4f84-cadd-bc0e-2a6d025ab072@sschwarzer.net> Reply-To: michael_news2016@gmx.de Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net YN+Ul5PeIC2gFnFNKqpT+gGLrM6BTc/AN6NZsM5bibNRQcEezi Cancel-Lock: sha1:rEfifShhKYrUTShFwOOr0kYzXd0= User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 In-Reply-To: Content-Language: de-DE Xref: csiph.com de.comp.lang.python:5196 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