Python Web框架-异常处理

介绍

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:

缺点

成功的返回数据格式,与失败的返回格式不一致,前端不好处理

解决

定义 全局异常处理器,统一格式


原文出处:/show_1GW3ro5btgLh.html