推荐答案
在 FastAPI 中,可以通过自定义异常处理器来捕获和处理特定的异常。以下是一个示例,展示了如何自定义异常处理:
-- -------------------- ---- ------- ---- ------- ------ -------- -------------- ------- ---- ----------------- ------ ------------ --- - --------- ----- --------------------------- --- -------------- ----- ----- --------- - ---- --------------------------------------- ----- --- --------------------------------- -------- ---- ----------------- ------ ------------- ---------------- ------------------- ------- ---------- --- --------- --------- - ----------------------------- ----- --- ------------------------- ----- -------------------------- -----
在这个示例中,我们定义了一个自定义异常 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 响应。