介绍
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
例子
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 ,浏览器显示如下:
{
"code": 200,
"data": {
"name": "李雷",
"age": 21
}
}
测试不存在
浏览器访问:http://127.0.0.1:8000/student/2 ,浏览器显示如下:
{
"detail": "没有此学号的学生"
}
在 http://127.0.0.1:8000/docs ,测试,可以看到状态码 404:
缺点
成功的返回数据格式,与失败的返回格式不一致,前端不好处理
解决
定义 全局异常处理器,统一格式

