AppleError по-прежнему является AppleError, а не BananaError, даже если error_code не имеет значения, поэтому нет смысла переходить на BananaError.
Вместо этого вы можете определить конкретные ошибки для разных кодов ошибок:
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 MacintoshError as exc: print("mac")
except GrannySmithError as exc: print("granny smith")
Если вы не хотите различать разные типы ошибок Apple, вы все равно можете перехватывать все ошибки Apple:
try: raise MacintoshError()
except AppleError as exc: print("generic apple")
Вы можете комбинировать их, например, выполняя специальную обработку только для GrannySmith, а не для Macintosh:
try: raise MacintoshError()
except GrannySmithError as exc: print("granny smith")
except AppleError as exc: print("generic apple")
Важно перечислить ошибки от наиболее конкретных к наименее конкретным. Если вы проверите AppleError перед GrannySmithError, то он никогда не войдет в блок GrannySmith.
person
Neapolitan
schedule
21.11.2016