包例外的放置位置

Where to put package exceptions

提问人:ReturnedVoid 提问时间:7/18/2023 最后编辑:ReturnedVoid 更新时间:7/18/2023 访问量:37

问:

我有一个包“service”,它由两个模块组成:“service.py”和“http.py”。 “service.py”使用“http.py”模块发出 HTTP 请求。 我想要这个界面:

try:
    result = service.do(...) # does HTTP call under the hood and returns service-specific result
except ServiceError as exc:
    print(exc.as_json()) # {"message": "error", "code": "HTTP_REQUEST_TIMEOUT"}

因此,异常应该是 JSON 可序列化的。

问题是如何组织例外。

  1. http.py 将有其特定的异常,service.py 将捕获它们并重新引发为 ServiceError(, )
  2. http.py 将引发单独“errors.py”中定义的 ServiceError,则“service.py”将不处理异常处理

所以一般来说,我们应该通过共享异常将模块耦合到同一个包中,还是让它们完全解耦更好?

P.S. 一个单独的“errors.py”模块看起来像一个代码味,类似于“utils.py”。

python-3.x 异常

评论

1赞 chepner 7/18/2023
除了包含模块和 之外,软件包是否执行其他操作?也许一切都应该通过 提供,并带有实现细节。serviceservicehttpserviceservice.serviceservice.http
0赞 ReturnedVoid 7/18/2023
@chepner,我稍微更新了这个问题。例如,该方法还可以调用 DB。所以问题是应该提高还是最好提高,抓住它并重新提高它。dohttp.pyServiceErrorHTTPErrorservice.pyServiceError
0赞 juanpa.arrivillaga 7/18/2023
我不认为是代码味。至少不是同样的方式。utils 的问题在于它基本上是一个“废纸篓”,任何东西都放在那里,因为我们不知道该把它放在哪里。 没关系,错误进去了,因为它们是错误。errorsutilserrors

答: 暂无答案