You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI中使用Postman测试时自定义状态码替代500内部错误的方法

FastAPI自定义错误状态码与响应实现方案

方案1:主动抛出HTTPException(适用单接口自定义错误)

这是最简便的实现方式,适合在业务逻辑判断触发错误时,直接返回指定状态码和响应内容:

  • 第一步导入FastAPI内置的HTTPException
  • 第二步在路由函数中,触发错误条件时抛出异常,指定status_code和返回内容detail

代码示例:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

class ReqData(BaseModel):
    num: int

@app.post("/test")
def test_post(data: ReqData):
    # 自定义错误判断逻辑
    if data.num < 0:
        # 抛出400状态码,自定义返回内容
        raise HTTPException(status_code=400, detail="输入数值不能为负数")
    if data.num > 100:
        # 抛出403状态码,自定义返回内容
        raise HTTPException(status_code=403, detail="输入数值超出最大限制100")
    return {"code": 200, "msg": "success", "data": data.num}

抛出异常后FastAPI会自动组装响应,不会返回默认的500错误。

方案2:全局异常处理器(适用统一处理同类型错误)

如果你需要全局捕获某一类错误(比如自定义业务异常、Python内置的ValueError/TypeError等),统一返回指定的状态码和响应,可以用全局异常注册实现:
代码示例:

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from pydantic import BaseModel

app = FastAPI()

# 自定义业务异常类
class BizError(Exception):
    def __init__(self, code: int, msg: str):
        self.code = code
        self.msg = msg

# 注册自定义业务异常的全局处理器
@app.exception_handler(BizError)
async def biz_error_handler(request: Request, exc: BizError):
    return JSONResponse(
        status_code=exc.code,
        content={"code": exc.code, "msg": exc.msg}
    )

# 也可以捕获Python内置异常,比如ValueError
@app.exception_handler(ValueError)
async def value_error_handler(request: Request, exc: ValueError):
    return JSONResponse(
        status_code=400,
        content={"code": 400, "msg": f"参数错误:{str(exc)}"}
    )

class ReqData(BaseModel):
    num: int

@app.post("/test")
def test_post(data: ReqData):
    if data.num < 0:
        # 抛出自定义业务异常,全局处理器会自动处理
        raise BizError(code=400, msg="输入数值不能为负数")
    # 触发内置ValueError也会被全局捕获
    if data.num == 999:
        raise ValueError("无效的特殊数值")
    return {"code": 200, "msg": "success", "data": data.num}

验证方式

在Postman中构造对应的错误输入参数发送请求,即可看到返回的状态码和响应内容都是你自定义的内容,不会再返回默认的500 Internal Server Error。

内容的提问来源于stack exchange,提问作者mufassir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:54:07