当前位置: 首页 > news >正文

FastAPI 中的错误处理:如何让错误信息更有价值

开头:

下面详细介绍如何在 FastAPI 中实现有效的错误处理策略。我们将讨论使用 HTTPException 来抛出带有详细描述的错误,定义 Pydantic 模型来结构化错误响应,以及如何通过自定义异常处理器来统一处理错误。此外,我们还将展示如何利用 JSONResponse 和路由装饰器中的 responses 参数来自定义错误信息。通过这些方法,你的 API 将能够提供清晰、一致且有用的错误信息,从而提高 API 的可用性和可维护性。
在这里插入图片描述

在 FastAPI中,为自定义错误添加详细的错误信息可以通过以下几种方式实现:

1. 使用 HTTPException

当你想要立即返回一个错误响应时,可以直接在路由函数中抛出一个 HTTPException,并传入 detail 参数来提供详细的错误信息。

from fastapi import FastAPI, HTTPExceptionapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id: int):if item_id != 1:raise HTTPException(status_code=404, detail="Item not found")return {"item_id": item_id, "value": "Foo"}

2. 自定义响应模型

你可以定义一个 Pydantic 模型来表示错误响应的结构,并在抛出 HTTPException 时使用该模型。

from fastapi import FastAPI
from fastapi.responses import JSONResponse
from pydantic import BaseModelclass ErrorModel(BaseModel):error: strdetail: strapp = FastAPI()@app.exception_handler(HTTPException)
async def http_exception_handler(request, exc):return JSONResponse(status_code=exc.status_code,content=ErrorModel(error=exc.detail, detail=f"An error occurred: {exc.detail}"))@app.get("/items/{item_id}")
async def read_item(item_id: int):if item_id != 1:raise HTTPException(status_code=404, detail="Item not found")return {"item_id": item_id, "value": "Foo"}

3. 使用 JSONResponse

在路由函数中返回一个 JSONResponse 对象,并设置状态码和内容。

from fastapi import FastAPI
from fastapi.responses import JSONResponseapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id: int):if item_id != 1:return JSONResponse(status_code=404, content={"error": "Item not found"})return {"item_id": item_id, "value": "Foo"}

4. 自定义异常处理器

创建一个自定义异常处理器来统一处理异常,并返回详细的错误信息。

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from fastapi.exception_handlers import http_exception_handlerapp = FastAPI()async def custom_http_exception_handler(request: Request, exc: HTTPException):return JSONResponse(status_code=exc.status_code,content={"error": exc.detail,"detail": "Additional information about the error can be provided here."})app.add_exception_handler(HTTPException, custom_http_exception_handler)@app.get("/items/{item_id}")
async def read_item(item_id: int):if item_id != 1:raise HTTPException(status_code=404, detail="Item not found")return {"item_id": item_id, "value": "Foo"}

5. 使用 responses 参数

在路由装饰器中使用 responses 参数定义自定义状态码和错误信息。

from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}", responses={404: {"model": dict, "description": "Item not found"}})
async def read_item(item_id: int):if item_id != 1:return {"error": "Item not found"}return {"item_id": item_id, "value": "Foo"}

通过这些方法,你可以在 FastAPI 中为自定义错误添加详细的错误信息,从而提供更丰富的错误处理和更好的客户端体验。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 上传文件到钉盘流程详解
  • SpringBoot整合WebSocket实现消息推送或聊天功能示例
  • 【计算机网络】HTTPHTTPS
  • 时序必读论文06|PITS : 基于非依赖策略学习时序patch特征表示
  • C和指针:指针
  • vue+IntersectionObserver + scrollIntoView 实现电梯导航
  • Android 车联网——汽车系统介绍(附2)
  • 工具知识 | Linux 常用命令参考手册
  • 深度学习——数据预处理,张量降维
  • 位段、枚举、联合
  • S32G EB tresos AutoCore下载和激活方法
  • 52.【C语言】 字符函数和字符串函数(strcat函数)
  • Oracle EBS中AR模块的财务流程概览
  • 《数据结构(C语言版)第二版》第八章-排序(8.5-归并排序、8.6基数排序、8.7 外部排序)
  • Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C语言)
  • 2017届校招提前批面试回顾
  • Brief introduction of how to 'Call, Apply and Bind'
  • CAP 一致性协议及应用解析
  • CSS3 变换
  • Java IO学习笔记一
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript新鲜事·第5期
  • Laravel核心解读--Facades
  • miaov-React 最佳入门
  • Protobuf3语言指南
  • Solarized Scheme
  • Sublime text 3 3103 注册码
  • Vultr 教程目录
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 计算机在识别图像时“看到”了什么?
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 使用Gradle第一次构建Java程序
  • 推荐一个React的管理后台框架
  • 无服务器化是企业 IT 架构的未来吗?
  • 一道面试题引发的“血案”
  • 函数计算新功能-----支持C#函数
  • 积累各种好的链接
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #1014 : Trie树
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (4)Elastix图像配准:3D图像
  • (7)svelte 教程: Props(属性)
  • (BFS)hdoj2377-Bus Pass
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二)测试工具
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (四)事件系统
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .Net 4.0并行库实用性演练
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Framework与.NET Framework SDK有什么不同?