2016-11-23 3 views
0

ich den Code wie unten geschrieben:Python behandeln Multi Ausnahmen

try: 
    do_somethong 
except TimedOutException as e: 
    logger.exception(e) 
except Exception as e: 
    logger.exception(e) 

ist dies gleiche mit Code unten?

try: 
    do_somethong 
except (TimedOutException, Exception) as e: 
    logger.exception(e) 

Ich weiß TimedOutException ist Unterklasse von Exception, sollte ich TimedOutException entfernen? Jeder kann es für mich erklären? Danke im Voraus!

Antwort

1

WARNUNG:except Exception as e: sollte nicht, wie es Gruppen jede Ausnahme verwendet werden, die von ihm inhetirts (die meisten der Ausnahmen erben von Exception mit Ausnahme von ein paar Python sind)

Wenn noch wollen Ausnahme verwenden , TimedOutException wäre nicht erforderlich.

Beim Behandeln von Ausnahmen wird jede Ausnahme behandelt, die eine Instanz der in der except-Klausel oder einer untergeordneten Klasse verwendeten Klasse ist. Daher behandelt Exception grundsätzlich 99% der Ausnahmen. Das ist der Grund, warum Exception nicht als eine Klasse für diesen Zweck empfohlen wird, es sei denn, Sie loggen sich nur ein und heben dieselbe Ausnahme erneut mit raise auf.

Bei der Verwendung mehrerer except-Klauseln ist die Reihenfolge wichtig, da jede Ausnahme nur von der ersten except-Klausel behandelt wird, die dem Typ entspricht.

+0

hmmm Ich habe die Frage anders interpretiert, aber ich sehe, was Sie jetzt sagen wollen. –

+0

Ich werde einige weitere Erklärungen hinzufügen, um es klarer zu machen. – Adirio

+0

Wenn ich es erneut versuchen möchte, wenn ich die 'TimedOutException' erhöhe, ist die erste Methode besser, aber wenn ich nur eine Fehlermeldung ausgeben möchte, kann ich' exception_exception' verwenden, muss aber 'TimedOutException' nicht hinzufügen , ist richtig? – pangpang

1

Mehrere except Blöcke verwendet werden, wenn Sie unterschiedliche Verarbeitung anwenden möchten:

try: 
    do_somethong 
except TimedOutException as e: 
    # special processing for timeout 
    logger.exception(e) 
except Exception as e: 
    # different processing for all other exception 
    logger.exception(e) 
    exit(1) # say it is fatal for example... 

Wenn Sie gleiche Verarbeitungsgruppe alle Ausnahmen in demselben Block anwenden und Ausnahme Subklassen von Klassen nicht bereits hinzuzufügen.

Verwandte Themen