title: FastAPI 错误处理与自定义错误消息完全指南:构建健壮的 API 应用 ️

date: 2025/3/12

updated: 2025/3/12

author: cmdragon

excerpt:

我们将涵盖常见的错误类型、如何捕获和处理这些错误、以及如何返回自定义的错误消息。通过实例和最佳实践,您将能够有效地应对常见错误,提高 API 的鲁棒性和可维护性。此外,文章中包含课后测验和常见错误解决方案,帮助您巩固所学知识。

categories:

  • 后端开发
  • FastAPI

tags:

  • FastAPI
  • 错误处理
  • 自定义错误消息
  • API设计
  • Web开发
  • 数据校验
  • 开发最佳实践



扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长

探索数千个预构建的 AI 应用,开启你的下一个伟大创意

第一章:FastAPI 中的错误处理基础

1.1 什么是错误处理?

错误处理是指在应用程序运行过程中,捕获和处理可能发生的错误,确保程序能够优雅地处理异常情况并给出适当的反馈。

1.2 FastAPI 的默认错误响应

FastAPI 提供了内置的错误处理机制,能够自动返回 HTTP 状态码和错误信息。例如,当请求的资源不存在时,会返回 404 错误。

from fastapi import FastAPI, HTTPException

app = 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}

1.3 常见的 HTTP 错误状态码

  • 400 Bad Request:请求参数无效或缺失。
  • 404 Not Found:请求的资源未找到。
  • 422 Unprocessable Entity:请求格式正确,但内容有误。
  • 500 Internal Server Error:服务器内部错误。

第二章:自定义错误消息

2.1 自定义错误响应

您可以通过自定义错误响应来改善用户体验,提供更清晰的错误信息。

from fastapi import Request, FastAPI, HTTPException
from fastapi.responses import JSONResponse app = FastAPI() @app.exception_handler(HTTPException)
async def http_exception_handler(request: Request, exc: HTTPException):
return JSONResponse(
status_code=exc.status_code,
content={"detail": exc.detail, "error": "Custom error message"},
)

2.2 示例:使用自定义错误消息

在前面的例子中,如果请求的资源未找到,将返回自定义的错误消息。

@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}

示例请求:

curl "http://localhost:8000/items/2"

返回:

{
"detail": "Item not found",
"error": "Custom error message"
}

2.3 处理其他异常

除了 HTTPException,您还可以处理其他类型的异常,例如数据库连接错误。

@app.exception_handler(Exception)
async def generic_exception_handler(request: Request, exc: Exception):
return JSONResponse(
status_code=500,
content={"detail": "An unexpected error occurred", "error": str(exc)},
)

第三章:最佳实践

3.1 记录错误

在生产环境中,记录错误信息是非常重要的,可以帮助您排查问题。

import logging

logging.basicConfig(level=logging.INFO)

@app.exception_handler(Exception)
async def generic_exception_handler(request: Request, exc: Exception):
logging.error(f"Unexpected error: {exc}")
return JSONResponse(
status_code=500,
content={"detail": "An unexpected error occurred"},
)

3.2 课后测验

  1. 如何在 FastAPI 中捕获和处理所有未处理的异常?
  2. 当请求参数不符合预期时,FastAPI 会返回什么错误?如何自定义这个错误的响应?
  3. 提供一个如何避免 SQL 注入攻击的示例。

3.3 常见错误与解决方案

错误:422 Validation Error

原因:请求数据格式不正确或缺失必填字段。

解决方案:检查请求体或查询参数的格式和必填性。

错误:404 Not Found

原因:请求的资源不存在。

解决方案:确认请求的 URL 是否正确,资源是否存在。

错误:500 Internal Server Error

原因:服务器内部错误。

解决方案:检查服务器日志,确认是否存在未处理的异常。


通过本教程,您应该能够掌握 FastAPI 中的错误处理机制和自定义错误消息的技巧,为构建更健壮的 API 应用打下基础。

余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长,阅读完整的文章:FastAPI 错误处理与自定义错误消息完全指南:构建健壮的 API 应用 ️ | cmdragon's Blog

往期文章归档:

FastAPI 错误处理与自定义错误消息完全指南:构建健壮的 API 应用 🛠️的更多相关文章

  1. Laravel自定义错误提示,自定义异常类提示,自定义错误返回信息,自定义错误页面

    方法一 新增CustomException.php文件 App\Exceptions\CustomException.php <?php namespace App\Exceptions; us ...

  2. JavaScript中的Error错误对象与自定义错误类型

    Error Error是JavaScript语言中的一个标准的内置对象,专门用于处理JS开发中的运行时错误. 当我们的JS代码在运行过程中发生错误的话,就会抛出Error对象,整个程序将会中断在错误发 ...

  3. PHP 错误与异常 笔记与总结(8)自定义错误处理函数 set_error_handler()

    通过 Set_error_handler() 函数设置用户自定义的错误处理函数. 步骤: ① 创建错误处理函数 ② 设置不同级别调用函数 ③ Set_error_handler() 函数制定接管错误处 ...

  4. SpringBoot自定义错误信息,SpringBoot适配Ajax请求

    SpringBoot自定义错误信息,SpringBoot自定义异常处理类, SpringBoot异常结果处理适配页面及Ajax请求, SpringBoot适配Ajax请求 ============== ...

  5. Springboot - 自定义错误页面

    Springboot 没找到页面或内部错误时,会访问默认错误页面.这节我们来自定义错误页面. 自定义错误页面 1.在resources 目录下面再建一个 resources 文件夹,里面建一个 err ...

  6. Gin框架 - 自定义错误处理

    目录 概述 错误处理 自定义错误处理 panic 和 recover 推荐阅读 概述 很多读者在后台向我要 Gin 框架实战系列的 Demo 源码,在这里再说明一下,源码我都更新到 GitHub 上, ...

  7. Laravel 5.5 FormRequest 自定义错误消息 postman调试时X-Requested-With设为XMLHttpRequest

    Laravel 5.5 FormRequest 自定义错误消息 使用FormRequest进行表单验证,就不用让验证逻辑和控制器里面的逻辑都混在一起.但在使用的时候呢,发现json错误返回的数据,与我 ...

  8. jquery.validate使用 - 自定义错误信息

    自定义错误消息的显示方式 默认情况下,验证提示信息用label元素来显示, 并且会添加css class, 通过css可以很方便设置出错控件以及错误信息的显示方式. /* 输入控件验证出错*/form ...

  9. ASP.NET自定义错误页面

    ASP.NET自定义错误页面 ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web.co ...

  10. ASP.NET MVC下自定义错误页和展示错误页的几种方式

    在网站运行中,错误是不可避免的,错误页的产生也是不可缺少的. 这几天看了博友的很多文章,自己想总结下我从中学到的和实际中配置的. 首先,需要知道产生错误页的来源,一种是我们的.NET平台抛出的,一种是 ...

随机推荐

  1. 绞尽脑汁终于搞定/天地图标注点marker旋转/任意角度旋转/无需引入其他框架

    一.前言说明 在其他地图组件中,标注点marker都是可以设置旋转角度的,这个功能其实非常实用,比如飞机移动轨迹,就是需要旋转飞机头飞行,轮船轨迹移动也是,百度地图和腾讯地图是通过调用setRotat ...

  2. WxPython跨平台开发框架之图标选择界面

    在使用 wxPython 开发跨平台桌面应用程序时,创建一个图标选择界面通常用于让用户从图标资源库中选择图标,我们可以把图标分为自定义的图标资源和系统的图标资源两大类,最终我们把它们整合一起使用,在框 ...

  3. 【Java 温故而知新系列】基础知识-01 概述

    1.什么是Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了 C++里难以理解的多继承. 指针等概念,因此Java语言具有功能强大和简单易 用两个特征.Java语言作为 ...

  4. 【源码】ByteToMessageDecoder对比自定义实现

    前言 在上一篇随笔中,我们探讨了如何实现一套自定义通信协议,其中涉及到的粘包和拆包处理最初是完全自定义实现的,后来则改为了继承 ByteToMessageDecoder 来简化处理. 本篇将重点讨论这 ...

  5. CDS标准视图:一次性账户的客户行项目 I_ONETIMEACCOUNTCUSTOMER

    视图名称:一次性账户的客户行项目 视图类型:基础 视图代码: 点击查看代码 @EndUserText.label: 'One-Time Account Data for Customer Items' ...

  6. 如何发现漏洞之我的多功能武器BurpSuite与全能插件

    知识点 1.插件类-武装BurpSuite-漏洞检测&分析辅助 2.插件类-武装谷歌浏览器-信息收集&情报辅助 一.演示案例-插件类-武装BurpSuite-漏洞检测&分析辅助 ...

  7. .net工作流elsa-书签

    啥是书签 流程引擎的核心关注点是安排流程,如:第1步做什么 → 第2步做什么 → 第n步做什么...,至于各步骤具体是怎么做的,是由你来决定的,这不是流程引擎关注的重点. 流程安排可能会涉及到分叉.并 ...

  8. MongoDB 常用指令(详细)

    # MongoDB 常用指令## 基础命令### 启动与连接```bash# 启动 MongoDB 服务mongod# 连接 MongoDB 客户端mongo```### 数据库操作```bash# ...

  9. 面试题:关于StringBuffer()源码的深度理解Debug分析

    import org.junit.Test; /** * @author CH * @create 2021 上午 11:23 */ public class IDEADebug { @Test pu ...

  10. Nmap 概述及端口状态解析

    Nmap 概述及端口状态解析 Nmap概述 Nmap是一款功能强大的网络探测和安全扫描工具,它允许系统管理员和网络安全专家对网络进行详尽的扫描,以获取关于网络主机及其所提供服务的详细信息. Nmap不 ...