2014-10-29 9 views
7

ich versuche, eine SystemExit Ausnahme in der folgenden Art und Weise zu fangen fangen.Kann nicht Ausnahme Python

Es ist jedoch nicht funktioniert, wenn ich so meinen Code ändern:

try: 
    raise SystemExit 
except: 
    print "success" 

Soweit ich weiß, sollte except Exception as exception jede Ausnahme fangen. So wird es auch beschrieben here. Warum funktioniert das hier nicht für mich?

Antwort

17

Wie erbt SystemExit nicht von Ausnahme. Sie müssten except BaseException verwenden.

Dies ist jedoch aus einem Grund:

Die Ausnahme von BaseException erbt statt Standarderror oder Ausnahme, so dass sie nicht versehentlich von Code abgefangen wird, die Ausnahme abfängt.

Es ist ungewöhnlich, dass Sie "echte" Ausnahmen so behandeln wollen, wie Sie mit SystemExit umgehen möchten. Sie können SystemExit möglicherweise besser mit except SystemExit abfangen.

+0

Perfekt. Vielen Dank! Es ist sehr gut in der Dokumentation Exception-Hierarchie dargestellt: https://docs.python.org/2/library/exceptions.html#exception-hierarchy –

Verwandte Themen