2010-12-07 18 views
5

Wie behandeln Sie eine Ausnahme, die von einer Ausnahme-Klausel in Python ausgelöst wird?Python-Ausnahme in Ausnahme

Wenn eine Ausnahme im Logger auftritt, sind wir out. Was sind Best Practices, um das zu vermeiden? Umgeben Sie einen außer einem anderen Versuch außer Block (klingt schrecklich)? Diese Funktion soll niemals irgendeine Ausnahme propagieren.

+2

Welchen Logger verwenden Sie? Das Standardprotokollierungsmodul schluckt die Ausnahmen, die während der Protokollierung aufgetreten sind: http://docs.python.org/library/logging.html#exceptions-raised-during-logging – aeter

+1

In der Tat. Sie müssen logging.raiseExceptions = 0 angeben, um Ausnahmen zu verschlingen. Das funktioniert für diesen Fall. Vielen Dank! – Tommy

Antwort

5

Im Allgemeinen ist es kein gutes Design, einen Catch-All außer Block zu haben, da es Programmierfehler maskieren kann. IMHO deshalb sieht es ein bisschen schrecklich aus.

Wenn Sie wirklich gnädig ausfallen wollen, egal was, dann fügen Sie einen verschachtelten try in die except-Klausel ein - aber protokollieren Sie die vollständige traceback, sonst kann es wirklich schwer zu debuggen werden.

0

FWIW, können Sie sich meine CausedException class ansehen. Vielleicht kann es dir in diesem Fall helfen; Sie müssten beide Ausnahmen abfangen, sie in die CausedException einbinden und dann eine CausedException mit diesen beiden als Grund angeben. Auf diese Weise werden alle beteiligten Stack-Traces in der Debug-Nachricht verfügbar sein.