Python 3: Повышение исключений в исключениях - PullRequest
0 голосов
/ 14 сентября 2018

Является ли код ниже плохой практикой? Это работает так, как я хочу, но не смог найти других примеров, когда исключение возникает в другом исключении. Если это плохая практика, какой идеальный способ сделать это?

Этот код находится в моем низкоуровневом обработчике, и я хочу иметь конкретные исключения для кодов 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}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...