最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • 用sqlalchemy構(gòu)建Django連接池的實(shí)例

    用sqlalchemy構(gòu)建Django連接池的實(shí)例

    今天小編就為大家分享一篇用sqlalchemy構(gòu)建Django連接池的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python中Celery 異步任務(wù)隊(duì)列的高級(jí)用法

    python中Celery 異步任務(wù)隊(duì)列的高級(jí)用法

    Celery 是一個(gè)高效且可擴(kuò)展的任務(wù)隊(duì)列框架,通過(guò)合理配置任務(wù)重試、分組工作流、優(yōu)先級(jí)管理以及監(jiān)控工具,可以顯著提升系統(tǒng)的可靠性和性能,感興趣的可以了解一下
    2025-09-09
  • python2.7的flask框架之引用js&css等靜態(tài)文件的實(shí)現(xiàn)方法

    python2.7的flask框架之引用js&css等靜態(tài)文件的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇python2.7的flask框架之引用js&css等靜態(tài)文件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python中逗號(hào)的三種作用實(shí)例分析

    Python中逗號(hào)的三種作用實(shí)例分析

    這篇文章主要介紹了Python中逗號(hào)的三種作用,實(shí)例分析了Python中的逗號(hào)在類(lèi)型轉(zhuǎn)換與打印輸出時(shí)的使用技巧,需要的朋友可以參考下
    2015-06-06
  • Python圖像處理之Hough變換檢測(cè)直線(xiàn)

    Python圖像處理之Hough變換檢測(cè)直線(xiàn)

    霍夫變換是一種特征檢測(cè)(feature?extraction),被廣泛應(yīng)用在圖像分析,本文將利用Hough變換實(shí)現(xiàn)直線(xiàn)檢測(cè),感興趣的小伙伴可以了解一下
    2023-07-07
  • 使用Python簡(jiǎn)單實(shí)現(xiàn)去除彩色水印

    使用Python簡(jiǎn)單實(shí)現(xiàn)去除彩色水印

    這篇文章主要為大家詳細(xì)介紹了如何使用Python簡(jiǎn)單實(shí)現(xiàn)去除彩色水印效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • Keras實(shí)現(xiàn)Vision?Transformer?VIT模型示例詳解

    Keras實(shí)現(xiàn)Vision?Transformer?VIT模型示例詳解

    這篇文章主要為大家介紹了Keras實(shí)現(xiàn)Vision?Transformer?VIT模型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 解讀什么是npy文件,為什么要用npy格式保存文件

    解讀什么是npy文件,為什么要用npy格式保存文件

    這篇文章主要介紹了什么是npy文件,為什么要用npy格式保存文件這個(gè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 用Python設(shè)計(jì)一個(gè)經(jīng)典小游戲

    用Python設(shè)計(jì)一個(gè)經(jīng)典小游戲

    本篇文章主要介紹如何用Python設(shè)計(jì)一個(gè)經(jīng)典小游戲:猜大小。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05
  • Kotlin 中的 apply 函數(shù)用法詳解

    Kotlin 中的 apply 函數(shù)用法詳解

    apply 函數(shù)是 Kotlin 中一個(gè)十分方便的工具,它使得對(duì)對(duì)象進(jìn)行初始化和配置變得更加簡(jiǎn)潔、清晰,通過(guò)與 Java 的對(duì)比,我們可以看出 Kotlin 在處理類(lèi)似情況時(shí)具有更高的表現(xiàn)力和簡(jiǎn)潔性,本文給大家介紹Kotlin apply 函數(shù)的用法,感興趣的朋友一起看看吧
    2024-03-03

最新評(píng)論

奎屯市| 乐平市| 兰坪| 木兰县| 墨脱县| 图们市| 墨江| 谢通门县| 黔江区| 黑河市| 长治市| 隆化县| 长丰县| 营山县| 天等县| 呼伦贝尔市| 汝南县| 荃湾区| 垦利县| 利川市| 金坛市| 鄂伦春自治旗| 安乡县| 石棉县| 贵溪市| 裕民县| 泗洪县| 和田县| 收藏| 萨迦县| 额尔古纳市| 赣州市| 霸州市| 图木舒克市| 鄂托克旗| 鸡东县| 交口县| 澄城县| 瑞昌市| 肇源县| 昌黎县|