Was ist der Unterschied zwischen except und except BaseException?

8

Was ist der Unterschied zwischen diesen beiden:

%Vor%

und

%Vor%

Ich meine im ersten Fall werden alle möglichen Ausnahmen abgefangen, aber gilt das für die zweite?

Kann die Fehlermeldung auch im ersten Fall gedruckt werden?

    
stefan.stt 20.06.2017, 14:28
quelle

1 Antwort

9

Praktisch gibt es keinen Unterschied zwischen except: und except BaseException: für jede aktuelle Python-Version.

Das liegt daran, dass Sie nicht jede Art von Objekt als Ausnahme auslösen können. In der raise -Anweisung ist ausdrücklich nicht erlaubt, noch etwas zu erhöhen:

  

[...] raise wertet den ersten Ausdruck als Ausnahmeobjekt aus. Dies muss entweder eine Unterklasse oder eine Instanz von BaseException sein.

Kühne Betonung meiner. Dies war jedoch nicht immer der Fall. In älteren Python-Releases (2.4 und früher) könnten Sie auch Strings als Ausnahmen verwenden.

Der Vorteil ist dann, dass Sie leichten Zugriff auf die gefangene Ausnahme haben. Um as targetname hinzufügen zu können, müssen Sie eine bestimmte Klasse von Ausnahmen abfangen, und nur BaseException wird dies tun.

Sie können immer noch auf die derzeit aktive Ausnahme zugreifen, indem Sie sys.exc_info() verwenden:

%Vor%

Wählen Sie aus, was Ihrer Meinung nach für Ihr zukünftiges Selbst und Ihre Kollegen besser lesbar ist.

    
Martijn Pieters 20.06.2017, 14:31
quelle

Tags und Links