AppleErrorは、errorEcodeが関係ない場合でも、AppleErrorであり、BananaErrorではないため、BananaErrorに落ちる意味がありません。あなたが代わりに別のエラーコードの特定のエラーを定義することができ
:あなたは、異なる種類を区別するために気にしない場合は
try: raise MacintoshError()
except MacintoshError as exc: print("mac")
except GrannySmithError as exc: print("granny smith")
:
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)
次に、あなたが特定のエラーに一致するように試みることができますアップルのエラーのすべてをトラップすることができます:
try: raise MacintoshError()
except AppleError as exc: print("generic apple")
ヨuがないMacintosh用、唯一のグラニースミスのための特別な処理をして、例えば、これらを組み合わせることができます。
try: raise MacintoshError()
except GrannySmithError as exc: print("granny smith")
except AppleError as exc: print("generic apple")
重要なことは、最も特定的なものからのエラーを一覧にすることです。 GrannySmithErrorの前にAppleErrorをテストすると、GrannySmithブロックに入ることはありません。