gpt4 book ai didi

python - Python 中处理自定义异常的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-01 09:11:46 25 4
gpt4 key购买 nike

根据我读到的内容,EAFP(请求宽恕比请求许可更容易)是 Python 中一种可接受的编码风格,实际上在很多情况下都是推荐的。

我的问题是,自定义异常何时会变得太多。假设我们有一个狗旅馆的 Web 应用程序,其结构如下:

- controllers
-- dogs.py (Receives REST requests)
- services
-- dogs.py (Connects to a DB and a third party API to retrieve dog breed information)
-- validator.py

现在三个请求示例:

  1. 有人想要创造一只新狗,但提供了无效信息。因此验证器有一个返回 False 的 is_valid_dog 方法。
  2. 有人发出 GET 请求来检索有关某只不存在的狗的信息。狗服务访问了数据库,但什么也没找到。
  3. 用户想要了解狗的品种信息,该服务访问了第三方 API,但已关闭(获得 500 状态)。

处理这种类型的流量的最佳方法是什么?

  1. 在第一种情况下,当 is_valid_dog 返回 False 时我是否应该引发异常?或者向 Controller 返回 None/False 以便它可以将其映射到 400 状态代码?
  2. 我应该返回 None 以便 Controller 将返回值映射到 404 吗?
  3. 我是否应该捕获异常并使用消息引发自定义 ThirdPartyAPIException,并且 Controller 必须知道如何处理该异常?

我很好奇何时返回特定值或仅在不同层引发异常,以便 Controller 可以返回最终状态。一般来说,哪里是处理这些异常/流程的最佳位置。

最佳答案

您应该遵循 DRF 的方法,它是 RESTful django api 的事实标准。看一下DRF的源码:https://github.com/encode/django-rest-framework/blob/master/rest_framework/exceptions.py .

  1. 创建默认的 ValidationError 异常,根据您的上下文自定义每个错误。如果引发异常,则返回 400 状态代码;

  2. 如果返回 None,则引发 NotFound 异常,并带有 404 状态代码;

  3. 我会坚持捕获异常并显示 503 代码“服务不可用”。

查看 APIException 类以了解异常的流程以及这些错误的响应。

关于python - Python 中处理自定义异常的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51603164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com