【问题标题】:Which exception should I raise for a REST API error?对于 REST API 错误,我应该引发哪个异常?
【发布时间】:2016-08-16 19:07:29
【问题描述】:

我正在用 Python 编写一个简单的 API 客户端,我想知道如果远程服务器不满意我应该引发什么异常。

API 本身的文档记录很差(我不知道所有可能的错误消息,所以我不能只为所有这些错误定义自定义类),我让请求处理引发 HTTPError 的 HTTP 级错误在这些情况下,但是如果服务器只在 JSON 响应中提供 error 键,我应该提出什么问题?

我目前正在使用Exception,但感觉范围很广,我想知道是否有更好的选择。

问候。

【问题讨论】:

  • 您实际上已经回答了您的问题。我不知道所有可能的错误消息,所以我不能只为所有错误消息定义自定义类。如果您知道服务器返回的确切错误,并且如果您知道客户端的用户是否可能想要处理它们,那么请开始定义您自己的异常类。
  • HTTP 不是一个非常严格的协议,几个实现在处理不同返回码的方式上存在差异很多(例如,每个人都知道如何处理 404,但是416 在实现中实际上是闻所未闻的,尽管它是一个完全有效的返回码)。无论您做什么,都需要仔细记录您的实施。

标签: python rest exception-handling


【解决方案1】:

是的,只是提高Exception 可能过于宽泛。

通常一个模块应该定义自己的异常基类:

class MyAPIClientError(Exception):
    pass

然后你可以继承它:

class RemoteServerNotHappyError(MyAPIClientError):
    pass

RemoteServerNotHappyError 可能应该提及服务器的 json 返回的内容,这是您的 API 客户端类不期望的。添加您认为合适的相关错误消息。

这意味着您的库的用户可以捕获这些特定异常(他们可能知道如何处理),而不必捕获每个异常(他们肯定不知道如何处理每种可能的故障模式)。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多