try:
something here
except:
print('the whatever error occurred.')
Wie kann ich den Fehler / die Ausnahme in meinem except:
Block drucken ?
python
exception
error-handling
TIMEX
quelle
quelle
Antworten:
Für Python 2.6 und höher und Python 3.x:
Verwenden Sie für Python 2.5 und frühere Versionen:
quelle
str( KeyError('bad'))
=>'bad'
- sagt nicht Ausnahmetypprint(repr(e))
. DieException.__str__
Basisimplementierung gibt nur die Ausnahmemeldung zurück, nicht den Typ. Oder verwenden Sie dastraceback
Modul, das Methoden zum Drucken der aktuellen Ausnahme, formatiert oder des vollständigen Tracebacks enthält.Das
traceback
Modul bietet Methoden zum Formatieren und Drucken von Ausnahmen und deren Rückverfolgungen, z. B. würde dies Ausnahmen drucken, wie dies der Standardhandler tut:Ausgabe:
quelle
error_message = traceback.format_exc()
except Exception as ex:
...sys.exc_info()
Funktion verfügbar undtraceback.print_exc()
wird von dort abgerufen . Sie müssen eine Ausnahme immer nur explizit übergeben, wenn Sie eine Ausnahme nicht behandeln oder wenn Sie Informationen basierend auf einer anderen Ausnahme anzeigen möchten.In Python 2.6 oder höher ist es etwas sauberer:
In älteren Versionen ist es immer noch gut lesbar:
quelle
Falls Sie Fehlerzeichenfolgen übergeben möchten, finden Sie hier ein Beispiel aus Fehlern und Ausnahmen (Python 2.6).
quelle
(Ich wollte dies als Kommentar zu @ jlduponts Antwort hinterlassen, aber ich habe nicht genug Ruf.)
Ich habe Antworten wie die Antwort von @ jldupont auch an anderen Stellen gesehen. FWIW, ich denke, es ist wichtig zu beachten, dass dies:
druckt die Fehlerausgabe
sys.stdout
standardmäßig an. Ein geeigneterer Ansatz zur Fehlerbehandlung im Allgemeinen wäre:(Beachten Sie, dass dies erforderlich ist,
import sys
damit dies funktioniert.) Auf diese Weise wird der FehlerSTDERR
anstelle von gedrucktSTDOUT
, wodurch die ordnungsgemäße Analyse / Umleitung / usw. der Ausgabe ermöglicht wird. Ich verstehe, dass es bei der Frage ausschließlich um das Drucken eines Fehlers ging, aber es scheint wichtig, hier auf die bewährte Methode hinzuweisen, anstatt dieses Detail wegzulassen, das zu nicht standardmäßigem Code für alle führen könnte, die letztendlich nicht besser lernen.Ich habe das
traceback
Modul nicht wie in der Antwort von Cat Plus Plus verwendet, und vielleicht ist das der beste Weg, aber ich dachte, ich würde es da rauswerfen.quelle
Python 3:
logging
Anstatt die Grundfunktion zu
print()
verwenden, kann das flexiblerelogging
Modul zum Protokollieren der Ausnahme verwendet werden. Daslogging
Modul bietet viele zusätzliche Funktionen, z. B. das Protokollieren von Nachrichten in einer bestimmten Protokolldatei, das Protokollieren von Nachrichten mit Zeitstempeln und zusätzliche Informationen darüber, wo die Protokollierung stattgefunden hat. (Weitere Informationen finden Sie in der offiziellen Dokumentation .)Das Protokollieren einer Ausnahme kann mit der Funktion auf Modulebene
logging.exception()
wie folgt erfolgen:Ausgabe:
Anmerkungen:
Die Funktion
logging.exception()
sollte nur von einem Ausnahmebehandler aufgerufen werdenDas
logging
Modul sollte nicht in einem Protokollierungshandler verwendet werden, um einRecursionError
(danke @PrakharPandey) zu vermeiden.Alternative Protokollebenen
Es ist auch möglich, die Ausnahme mit einer anderen Protokollebene zu protokollieren, indem Sie das Schlüsselwortargument
exc_info=True
wie folgt verwenden:quelle
Ein Liner-Fehler kann mit Assert-Anweisungen ausgelöst werden, wenn Sie dies möchten. Auf diese Weise können Sie statisch reparierbaren Code schreiben und Fehler frühzeitig überprüfen.
quelle
Man hat so ziemlich die Kontrolle darüber, welche Informationen aus dem Traceback angezeigt / protokolliert werden sollen, wenn Ausnahmen abgefangen werden.
Der Code
würde den folgenden Traceback erzeugen:
Drucken / Protokollieren Sie den vollständigen Traceback
Wie bereits erwähnt, können Sie den gesamten Traceback mithilfe des Traceback-Moduls abfangen:
Dies erzeugt die folgende Ausgabe:
Sie können dasselbe erreichen, indem Sie die Protokollierung verwenden:
Ausgabe:
Nur Druckername / Nachricht drucken / protokollieren
Möglicherweise interessieren Sie sich nicht für den gesamten Traceback, sondern nur für die wichtigsten Informationen, wie z. B. den Namen der Ausnahme und die Ausnahme-Nachricht. Verwenden Sie:
Ausgabe:
quelle