Является ли код ниже плохой практикой? Это работает так, как я хочу, но не смог найти других примеров, когда исключение возникает в другом исключении. Если это плохая практика, какой идеальный способ сделать это?
Этот код находится в моем низкоуровневом обработчике, и я хочу иметь конкретные исключения для кодов HTTP 400/401, а также общее исключение для других кодов HTTP, чтобы упростить обработку исключений в моем высоком уровень обертки (ей).
В идеале должно быть только одно место, где HTTP-коды сопоставляются конкретному сообщению или под исключению.
class APIRequestError(APIError):
def __init__(self, code=-1, message="N/A"):
if code == 400:
raise Exceptions.APIBadRequest(message)
elif code == 401:
raise Exceptions.APIAuthentication(message)
elif code == 404:
Exception.__init__(self, "HTTP 404 : API resource not found!")
elif code == 500:
Exception.__init__(self, "HTTP 500 : Server-side error!")
else:
Exception.__init__(self, f"Unhandled HTTP error ({code}).")
class APIBadRequest(APIRequestError):
def __init__(self, message="N/A"):
message_out = str(message)[:Exceptions.MSG_MAX]
Exception.__init__(self, f"Bad API request : {message_out}")
class APIAuthentication(APIRequestError):
def __init__(self, message="N/A"):
message_out = str(message)[:Exceptions.MSG_MAX]
Exception.__init__(self, f"Authentication error : {message_out}")