首页 > 解决方案 > Python 3:在异常中引发异常

问题描述

下面的代码是不好的做法吗?它按我想要的方式工作,但找不到在另一个异常中引发异常的任何其他示例。如果这是一种不好的做法,那么理想的方法是什么?

这段代码在我的低级处理程序中,我希望对代码 HTTP 400/401 有特定的异常 - 以及对其他 HTTP 代码的通用异常 - 以便在我的高级包装器中简化异常处理处理( s)。

理想情况下,应该只有一个位置 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}")

标签: pythonexception-handling

解决方案


推荐阅读