欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?Fastapi實(shí)現(xiàn)統(tǒng)一處理各種異常

 更新時(shí)間:2025年06月10日 10:24:51   作者:Sperains  
這篇文章主要為大家詳細(xì)介紹了Python如何在Fastapi中實(shí)現(xiàn)統(tǒng)一處理各種異常,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在 FastAPI 中處理參數(shù)校驗(yàn)錯(cuò)誤(通常由 Pydantic 模型或路徑參數(shù)校驗(yàn)觸發(fā))需要使用自定義異常處理器捕獲 RequestValidationError。以下是詳細(xì)實(shí)現(xiàn)步驟:

1. 基礎(chǔ)實(shí)現(xiàn)(返回標(biāo)準(zhǔn)錯(cuò)誤結(jié)構(gòu))

from fastapi import FastAPI, Request, status
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse

app = FastAPI()

@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request: Request, exc: RequestValidationError):
    return JSONResponse(
        status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
        content={
            "code": 422,
            "message": "參數(shù)校驗(yàn)失敗",
            "errors": exc.errors()
        },
    )

# 示例路由
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str):
    return {"item_id": item_id, "q": q}

2. 自定義錯(cuò)誤格式(簡(jiǎn)化輸出)

@app.exception_handler(RequestValidationError)
async def custom_validation_handler(request: Request, exc: RequestValidationError):
    simplified_errors = []
    for error in exc.errors():
        # 提取關(guān)鍵信息
        simplified_errors.append({
            "field": "->".join(str(loc) for loc in error["loc"]),  # 錯(cuò)誤字段路徑
            "msg": error["msg"],
            "type": error["type"]
        })
    
    return JSONResponse(
        status_code=422,
        content={
            "error": "ValidationError",
            "detail": simplified_errors
        }
    )

3. 完整示例(含路由演示)

from pydantic import BaseModel, Field

class Item(BaseModel):
    name: str = Field(..., min_length=3)
    price: float = Field(gt=0)

@app.post("/items/")
async def create_item(item: Item):
    return item

# 測(cè)試無(wú)效請(qǐng)求
# curl -X POST 'http://localhost:8000/items/' \
# -H 'Content-Type: application/json' \
# -d '{"name": "AB", "price": -1}'

4. 處理自定義錯(cuò)誤類(lèi)型(擴(kuò)展)

如果需要統(tǒng)一處理其他錯(cuò)誤:

from fastapi import HTTPException

@app.exception_handler(HTTPException)
async def http_exception_handler(request: Request, exc: HTTPException):
    return JSONResponse(
        status_code=exc.status_code,
        content={"error": exc.detail}
    )

關(guān)鍵說(shuō)明

1.錯(cuò)誤信息結(jié)構(gòu)

{
  "loc": ["body", "price"],
  "msg": "ensure this value is greater than 0",
  "type": "value_error.number.not_gt"
}
  • loc:錯(cuò)誤位置(body/query/path/header等 + 字段路徑)
  • msg:人類(lèi)可讀錯(cuò)誤描述
  • type:錯(cuò)誤類(lèi)型標(biāo)識(shí)符

2.HTTP 狀態(tài)碼

參數(shù)校驗(yàn)錯(cuò)誤通常返回 422 Unprocessable Entity

路徑參數(shù)錯(cuò)誤(如 item_id: int 接收到字符串)會(huì)觸發(fā)相同錯(cuò)誤

3.調(diào)試信息: 生產(chǎn)環(huán)境中建議隱藏詳細(xì)錯(cuò)誤,可通過(guò)環(huán)境變量控制:

import os

@app.exception_handler(RequestValidationError)
async def handler(...):
    if os.getenv("ENV") == "prod":
        return JSONResponse(status_code=422, content={"error": "Invalid params"})
    else:
        # 返回完整錯(cuò)誤

測(cè)試驗(yàn)證

使用無(wú)效參數(shù)請(qǐng)求示例路由,將得到類(lèi)似響應(yīng):

{
  "code": 422,
  "message": "參數(shù)校驗(yàn)失敗",
  "errors": [
    {
      "field": "body->name",
      "msg": "ensure this value has at least 3 characters",
      "type": "value_error.any_str.min_length"
    },
    {
      "field": "body->price",
      "msg": "ensure this value is greater than 0",
      "type": "value_error.number.not_gt"
    }
  ]
}

提示:FastAPI 自動(dòng)生成的文檔(Swagger UI)中的參數(shù)校驗(yàn)錯(cuò)誤由內(nèi)置處理器處理,自定義處理器不影響文檔界面行為。

到此這篇關(guān)于Python Fastapi實(shí)現(xiàn)統(tǒng)一處理各種異常的文章就介紹到這了,更多相關(guān)Python Fastapi異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • CoAtNet實(shí)戰(zhàn)之對(duì)植物幼苗圖像進(jìn)行分類(lèi)(pytorch)

    CoAtNet實(shí)戰(zhàn)之對(duì)植物幼苗圖像進(jìn)行分類(lèi)(pytorch)

    谷歌的最新模型CoAtNet做了卷積 + Transformer的融合,在ImageNet-1K數(shù)據(jù)集上取得88.56%的成績(jī)。本文主要介紹如何用CoAtNet實(shí)現(xiàn)植物幼苗圖像的分類(lèi)。感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • Scrapy項(xiàng)目實(shí)戰(zhàn)之爬取某社區(qū)用戶詳情

    Scrapy項(xiàng)目實(shí)戰(zhàn)之爬取某社區(qū)用戶詳情

    這篇文章主要介紹了Scrapy項(xiàng)目實(shí)戰(zhàn)之爬取某社區(qū)用戶詳情,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 淺析使用Python操作文件

    淺析使用Python操作文件

    文件操作對(duì)編程語(yǔ)言的重要性不用多說(shuō),如果數(shù)據(jù)不能持久保存,信息技術(shù)也就失去了意義。按照本人經(jīng)驗(yàn),IO也是蠻頭疼的一件事,因?yàn)椴粫?huì)用得太多,所以總是記不住API,每次都要重新google就會(huì)打斷思路,還不一定每次都快速得到正確的文章。
    2017-07-07
  • Python面向?qū)ο蟪绦蛟O(shè)計(jì)之私有變量,私有方法原理與用法分析

    Python面向?qū)ο蟪绦蛟O(shè)計(jì)之私有變量,私有方法原理與用法分析

    這篇文章主要介紹了Python面向?qū)ο蟪绦蛟O(shè)計(jì)之私有變量,私有方法,結(jié)合實(shí)例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中私有變量,私有方法相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • Python的iOS自動(dòng)化打包實(shí)例代碼

    Python的iOS自動(dòng)化打包實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Python的iOS自動(dòng)化打包的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • pip安裝提示Twisted錯(cuò)誤問(wèn)題(Python3.6.4安裝Twisted錯(cuò)誤)

    pip安裝提示Twisted錯(cuò)誤問(wèn)題(Python3.6.4安裝Twisted錯(cuò)誤)

    這篇文章主要介紹了pip安裝提示Twisted錯(cuò)誤問(wèn)題(Python3.6.4安裝Twisted錯(cuò)誤),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Matplotlib繪圖基礎(chǔ)之3D圖形繪制詳解

    Matplotlib繪圖基礎(chǔ)之3D圖形繪制詳解

    matplotlib 在1.0版本之前其實(shí)是不支持3D圖形繪制的,后來(lái)的版本中,matplotlib加入了3D圖形的支持,擴(kuò)展了其展示數(shù)據(jù)分布和關(guān)系的能力,下面就和大家介紹一下matplotlib中繪制各類(lèi)3D圖形的方法
    2023-08-08
  • matplotlib圖例、標(biāo)簽、坐標(biāo)軸刻度的字體設(shè)置方式

    matplotlib圖例、標(biāo)簽、坐標(biāo)軸刻度的字體設(shè)置方式

    這篇文章主要介紹了matplotlib圖例、標(biāo)簽、坐標(biāo)軸刻度的字體設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Django路由Path方法的實(shí)現(xiàn)

    Django路由Path方法的實(shí)現(xiàn)

    本文主要介紹了Django路由Path方法的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python中虛擬環(huán)境依賴問(wèn)題的解決方案詳解

    Python中虛擬環(huán)境依賴問(wèn)題的解決方案詳解

    在Python開(kāi)發(fā)中,虛擬環(huán)境和依賴管理是必不可少的工具,本文將以一個(gè)實(shí)際案例為基礎(chǔ),詳細(xì)分析如何解決Python虛擬環(huán)境中的依賴問(wèn)題,希望對(duì)大家有所幫助
    2025-03-03

最新評(píng)論