Während Antwort James fast immer ist das, was Sie eigentlich wollen, ist es nicht ganz, was der OP fragte nach:
Gibt es eine Möglichkeit, jede beliebige Ausnahme auszuschließen und die Exception-Nachricht im Except-Block auszudrucken?
Exception
eigentlich nicht alle Ausnahmen behandeln, nur alle Ausnahmen Sie in der Regel fangen wollen. Insbesondere in 2.5 und später:
Alle eingebauten, nicht systemauslösenden Ausnahmen werden von dieser Klasse abgeleitet. Alle benutzerdefinierten Ausnahmen sollten auch von dieser Klasse abgeleitet sein.
Dies läßt ein paar Dinge aus:
- eingebaute System Austritt Ausnahmen, wie ein
KeyboardInterrupt
vom Benutzer ^C
(2.5 und höher)
- benutzerdefinierte Ausnahmen, der don schlagen ‚t folgen, dass‚sollte‘
in sehr seltenen Fällen, Sie Dinge wie KeyboardInterrupt
behandeln möchten, in welchem Fall Sie BaseException
stattverwenden.(Siehe Exception hierarchy für eine Liste von denen Ausnahmen sind und nicht Exception
Subklassen.) Also:
try:
# stuff
except BaseException as e:
print e
und (in der Regel vorübergehend während des Debuggens) Manchmal findet man wirklich absolut alles zu handhaben wollen. In 2.7 enthält das Ausnahmen, die als Old-Style-Klassen definiert sind. in 2.5 und früher enthält es auch Zeichenfolgen. Der einzige Weg, alle diese Möglichkeiten zu handhaben ist mit einem nackten except
zu verwenden und dann verwenden sys.exc_info
(und gegebenenfalls re- raise
, was Sie wollen nicht zu handhaben):
try:
# stuff
except:
type, value, traceback = sys.exc_info()
print value
Als Randbemerkung, ich verwende die neue except
Syntax (except Exception as e
) oben. Dies funktioniert in 2.6 und später, einschließlich 3.x. Die alte Syntax (except Exception, e
) ist in 2.6 veraltet und funktioniert in 3.0 nicht mehr. Wenn Sie jedoch mit älteren 2.x-Versionen arbeiten möchten, müssen Sie sie verwenden.
Beachten Sie, dass die Syntax "Exception, e" ab 2.6 veraltet ist und nicht mehr ab 3.0 arbeitet. Wenn Sie Code haben, der sowohl mit 2.x als auch mit 3.x arbeiten soll, verwenden Sie stattdessen "Exception as e". (Wenn Sie jedoch mit 2.5 oder früher arbeiten müssen, müssen Sie diese Syntax verwenden.) – abarnert