Python Web框架-异常处理 作者:马育民 • 2026-08-15 14:01 • 阅读:10001 # 介绍 FastAPI 的异常处理分为:**HTTP 标准异常、自定义业务异常、全局异常捕获、请求验证异常重写、中间件捕获异常、业务自定义异常体系**,底层基于 Starlette 的异常处理机制。 FastAPI 继承 Starlette,所有异常处理器本质是 `@app.exception_handler(异常类)` 注册处理器,捕获对应异常,返回 Response 对象。 # 抛出 HTTPException 异常 `fastapi.HTTPException`,用于接口主动抛出 HTTP 错误响应。 ### HTTPException 参数 - `status_code`:HTTP状态码,必填 - `detail`:错误详情,可以字符串、字典、列表 - `headers`:可选,设置响应头 **注意:**`HTTPException` 只会被 FastAPI/Starlette **路由层捕获(视图函数)**,**普通线程、后台任务里面抛出 HTTPException不会被捕获,会直接崩溃**,后台任务要手动 `try‑except` # 例子 ```python from fastapi import FastAPI, HTTPException from starlette import status app = FastAPI() @app.get('/student/{id}') async def get_student(id: int): if id == 1: ret = { "code":200, "data":{ 'name': '李雷', 'age': 21, } } else: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail='没有此学号的学生' ) return ret ``` ### 测试成功 浏览器访问:http://127.0.0.1:8000/student/1 ,浏览器显示如下: ```json { "code": 200, "data": { "name": "李雷", "age": 21 } } ``` ### 测试不存在 浏览器访问:http://127.0.0.1:8000/student/2 ,浏览器显示如下: ```json { "detail": "没有此学号的学生" } ``` 在 http://127.0.0.1:8000/docs ,测试,可以看到状态码 `404`: [](https://www.malaoshi.top/upload/0/0/1GW3rnKbOVJz.png) [](https://www.malaoshi.top/upload/0/0/1GW3rnHEBy5j.png) ### 缺点 成功的返回数据格式,与失败的返回格式不一致,前端不好处理 ### 解决 定义 [全局异常处理器](https://www.malaoshi.top/show_1GW3ro61nCXj.html "全局异常处理器"),统一格式 原文出处:/show_1GW3ro5btgLh.html