推荐答案
在 FastAPI 中,可以通过自定义异常处理器来捕获和处理特定的异常。以下是一个示例,展示了如何自定义异常处理:
// www.javascriptcn.com code example
from fastapi import FastAPI, HTTPException, Request
from fastapi.responses import JSONResponse
app = FastAPI()
class CustomException(Exception):
def __init__(self, name: str):
self.name = name
@app.exception_handler(CustomException)
async def custom_exception_handler(request: Request, exc: CustomException):
return JSONResponse(
status_code=418,
content={"message": f"Oops! {exc.name} did something wrong."},
)
@app.get("/custom-exception")
async def raise_custom_exception():
raise CustomException(name="John Doe")在这个示例中,我们定义了一个自定义异常 CustomException,并通过 @app.exception_handler 装饰器注册了一个异常处理器 custom_exception_handler。当 CustomException 被抛出时,FastAPI 会自动调用这个处理器,并返回一个自定义的 JSON 响应。
本题详细解读
自定义异常类
首先,我们定义了一个自定义异常类 CustomException,它继承自 Python 的 Exception 类。这个异常类可以包含任何你需要的额外信息,比如在这个例子中,我们传递了一个 name 参数。
class CustomException(Exception):
def __init__(self, name: str):
self.name = name自定义异常处理器
接下来,我们使用 @app.exception_handler 装饰器来注册一个异常处理器。这个处理器会捕获所有 CustomException 类型的异常,并返回一个自定义的 JSON 响应。
@app.exception_handler(CustomException)
async def custom_exception_handler(request: Request, exc: CustomException):
return JSONResponse(
status_code=418,
content={"message": f"Oops! {exc.name} did something wrong."},
)在这个处理器中,我们返回了一个 JSONResponse,并设置了自定义的状态码(418)和响应内容。
触发自定义异常
最后,我们在路由处理函数中抛出自定义异常 CustomException,以测试我们的异常处理器。
@app.get("/custom-exception")
async def raise_custom_exception():
raise CustomException(name="John Doe")当访问 /custom-exception 路由时,FastAPI 会捕获 CustomException 并调用我们定义的异常处理器,返回自定义的 JSON 响应。