Python框架篇(4):FastApi-错误处理

本文主要探讨了在FastAPI框架中处理错误的方法,包括验证错误、路由错误、翻译参数错误和系统错误。针对每种错误类型,分别介绍了如何自定义处理器以覆盖默认返回,以及如何进行验证。此外,还分享了一种将英文错误信息翻译成中文的解决思路,并提供了全套Python学习资料链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.验证错误

1.1 默认返回

当传参不符合模型验证规则时,默认错误信息和格式返回如下:

{
  "detail": [
    {
      "loc": [
        "body",
        "age"
      ],
      "msg": "ensure this value is greater than 18",
      "type": "value_error.number.not_gt",
      "ctx": {
        "limit_value": 18
      }
    },
    {
      "loc": [
        "body",
        "likes"
      ],
      "msg": "ensure this value has at least 2 items",
      "type": "value_error.list.min_items",
      "ctx": {
        "limit_value": 2
      }
    }
  ]
}

在上篇文章 Python框架篇(3):FastApi-响应模型中,我们强调的是接口对外输出结构应该一致,所以即便参数错误应该输出以下结构:

{
    "code":-1,
    "msg":"具体错误信息...",
    "data": null,
    "additional":{
        "time":"2023-12-04 19:00:23",
        "trace_id":"cc1b12a5dfee26a7dcc29fe47dcfbde0"
    }
}

按照官方文档说法,我们需要自定义错误处理器,并以此来覆盖框架默认的异常处理器,参数验证错误处理器默认走的是RequestValidationError,所以覆盖它就行,下面是实现步骤

1.2 自定义处理器

新建包app/errors,并新增文件validation_error.py,文件内容如下:

from fastapi import Request, status
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from app.types import response
from fastapi.encoders import jsonable_encoder

async def validationExceptionHandler(request: Request, exc: RequestValidationError):
    """ 自定义参数验证异常错误"""
    errMsg = ""
    for error in exc.errors():
        errMsg += ".".join(error.get("loc")) + ":" + error.get("msg") + ";"
    # 这里response.ResponseFail是上篇文章中的内容
    return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(response.ResponseFail(errMsg)))

在包app/errors/__init__.py引用,并封装统一注册方法:

from fastapi import FastAPI
from .validation_error import validationExceptionHandler
from fastapi.exceptions import RequestValidationError

def registerCustomErrorHandle(server: FastAPI):
    """ 统一注册自定义错误处理器"""
    # 注册参数验证错误,并覆盖模式RequestValidationError
    server.add_exception_handler(RequestValidationError, validationExceptionHandler)


1.3 注册&覆盖

main.py中调用registerCustomErrorHandle

# 引入
from app import erro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值