Ein AppleError ist immer noch ein AppleError und kein BananaError, auch wenn error_code nicht relevant ist, es macht also keinen Sinn, bis zu BananaError durchzukommen.
Sie könnten stattdessen spezifische Fehler für Ihre verschiedenen Fehlercodes definieren:
GRANNY_SMITH_ERROR = 1
MACINTOSH_ERROR = 2
class AppleError(Exception):
def __init__(self, error_code, *args):
super(AppleError, self).__init__(*args)
self.error_code = error_code
class GrannySmithError(AppleError):
def __init__(self, *args):
super(GrannySmithError, self).__init__(GRANNY_SMITH_ERROR, *args)
class MacintoshError(AppleError):
def __init__(self, *args):
super(MacintoshError, self).__init__(MACINTOSH_ERROR, *args)
Dann können Sie versuchen, den spezifischen Fehler entsprechen:
try: raise MacintoshError()
except MacintoshError as exc: print("mac")
except GrannySmithError as exc: print("granny smith")
Wenn Sie nicht zwischen verschiedenen Arten zu unterscheiden, ist es egal Von Apple-Fehler können Sie immer noch alle Apple-Fehler abfangen:
try: raise MacintoshError()
except AppleError as exc: print("generic apple")
Yo u kann diese zum Beispiel nur tun spezielle Verarbeitung für Grannysmith, nicht für Macintosh kombinieren:
try: raise MacintoshError()
except GrannySmithError as exc: print("granny smith")
except AppleError as exc: print("generic apple")
Das Wichtigste der Fehler von den meisten spezifisch wenigsten spezifisch aufzulisten ist. Wenn Sie vor GrannySmithError auf AppleError testen, wird es niemals in den OmaSmith-Block eintreten.