Wie fange ich mehrere Ausnahmen in einer Zeile (außer Block)?
Mach das:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error) # might log or have some other default behavior...
Die Klammern sind aufgrund der älteren Syntax erforderlich, bei der das Fehlerobjekt mithilfe von Kommas einem Namen zugewiesen wurde. Das as
Schlüsselwort wird für die Zuweisung verwendet. Sie können einen beliebigen Namen für das Fehlerobjekt verwenden, ich error
persönlich bevorzuge .
Beste Übung
Um dies auf eine Weise zu tun, die derzeit und vorwärts mit Python kompatibel ist, müssen Sie die Ausnahmen durch Kommas trennen und in Klammern setzen, um sich von der früheren Syntax zu unterscheiden, bei der die Ausnahmeinstanz einem Variablennamen zugewiesen wurde, indem Sie dem Ausnahmetyp folgen, der mit a abgefangen werden soll Komma.
Hier ist ein Beispiel für eine einfache Verwendung:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
sys.exit(0)
Ich gebe nur diese Ausnahmen an, um zu vermeiden, dass Fehler ausgeblendet werden. Wenn ich auf sie stoße, erwarte ich die vollständige Stapelverfolgung.
Dies ist hier dokumentiert: https://docs.python.org/tutorial/errors.html
Sie können die Ausnahme einer Variablen zuweisen ( e
ist üblich, bevorzugen jedoch möglicherweise eine ausführlichere Variable, wenn Sie eine lange Ausnahmebehandlung haben oder Ihre IDE nur größere Auswahlen hervorhebt, wie meine.) Die Instanz verfügt über ein args-Attribut. Hier ist ein Beispiel:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError) as err:
print(err)
print(err.args)
sys.exit(0)
Beachten Sie, dass in Python 3 das err
Objekt außerhalb des Gültigkeitsbereichs liegt, wenn der except
Block geschlossen wird.
Veraltet
Möglicherweise wird Code angezeigt, der den Fehler mit einem Komma belegt. Diese Verwendung, das einzige in Python 2.5 und früheren Versionen verfügbare Formular, ist veraltet. Wenn Sie möchten, dass Ihr Code in Python 3 vorwärtskompatibel ist, sollten Sie die Syntax aktualisieren, um das neue Formular zu verwenden:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
print err
print err.args
sys.exit(0)
Wenn Sie die Zuweisung von Komma-Namen in Ihrer Codebasis sehen und Python 2.5 oder höher verwenden, wechseln Sie zu der neuen Methode, damit Ihr Code beim Upgrade kompatibel bleibt.
Der suppress
Kontextmanager
Die akzeptierte Antwort besteht aus mindestens 4 Codezeilen:
try:
do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
Die try
, except
, pass
Linien können in einer einzigen Zeile mit dem gehandhabt werden 3,4 Unterdrückungs - Kontext - Manager, in Python :
from contextlib import suppress
with suppress(IDontLikeYouException, YouAreBeingMeanException):
do_something()
Wenn Sie also pass
bestimmte Ausnahmen haben möchten , verwenden Sie suppress
.