22 快速掌握FastAPI中的常见错误处理

在上一篇中,我们讨论了如何在FastAPI中实现自定义验证逻辑,为构建灵活且健壮的API提供了基础。在本篇,我们将重点关注错误处理,特别是如何处理在API运行时可能遇到的常见错误。这部分的知识将有助于你更好地管理应用程序中的异常,使得API在发生错误时能够返回友好的提示信息,而不是直接崩溃。

常见错误处理

在FastAPI中,我们可以使用两个主要的机制来处理错误:HTTPException依赖项异常处理。这两种方法都可以帮助我们返回合适的HTTP状态码和错误消息。

1. 使用HTTPException

HTTPException是FastAPI提供的一个异常类,便于我们在API函数中显式引发HTTP错误。例如,当用户请求了一个不存在的资源时,我们可以返回404状态码。

示例:资源未找到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from fastapi import FastAPI, HTTPException

app = FastAPI()

# 模拟的数据库
fake_items_db = {
1: {"name": "Item 1"},
2: {"name": "Item 2"},
}

@app.get("/items/{item_id}")
async def read_item(item_id: int):
item = fake_items_db.get(item_id)
if item is None:
raise HTTPException(status_code=404, detail="Item not found")
return item

在这个例子中,我们定义了一个API端点/items/{item_id},如果用户请求的item_idfake_items_db中不存在,我们就会引发HTTPException,返回404状态和"Item not found"的详细信息。

2. 处理验证错误

当我们使用Pydantic模型时,输入数据的验证可以自动处理,并且在验证失败时会返回422状态码。我们可以自定义验证错误的响应,以便提供更清晰的信息。

示例:自定义Pydantic模型错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field, ValidationError

app = FastAPI()

class Item(BaseModel):
id: int
name: str = Field(..., min_length=1)

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

@app.exception_handler(ValidationError)
async def validation_exception_handler(request, exc):
return JSONResponse(
status_code=422,
content={"detail": exc.errors(), "body": exc.body},
)

在这个例子里,当请求的body数据不符合Item模型的结构时,我们使用@app.exception_handler(ValidationError)装饰器来自定义验证错误的处理。这样能够让错误信息更加清晰且结构化。

3. 捕获未处理异常

有时我们可能会遇到未被捕获的通用异常。在FastAPI中,我们可以使用全局错误处理器来处理所有未处理的异常。

示例:全局异常处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from fastapi import FastAPI, HTTPException
from fastapi.responses import JSONResponse

app = FastAPI()

@app.get("/divide/{a}/{b}")
async def divide(a: int, b: int):
return a / b

@app.exception_handler(Exception)
async def global_exception_handler(request, exc):
return JSONResponse(
status_code=500,
content={"detail": "An error occurred. Please try again later."},
)

在这个例子中,我们定义了一个简单的除法API。若用户输入0作为分母,这将引发ZeroDivisionError。我们通过全局异常处理器global_exception_handler捕获所有未处理的异常,返回500状态和一个通用的错误信息。

小结

在本篇文章中,我们讨论了如何在FastAPI应用中处理常见的错误。我们学习了通过HTTPException返回特定的HTTP错误状态,以及如何自定义输入验证错误和全局异常处理。这些技巧将帮助我们构建出对用户更友好的API,提高应用的稳定性。

在下一篇中,我们将讨论自定义异常处理,为API添加更多层次的错误管理,使其更加健壮。请继续关注!

22 快速掌握FastAPI中的常见错误处理

https://zglg.work/python-fastapi-zero/22/

作者

IT教程网(郭震)

发布于

2024-08-17

更新于

2024-08-18

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论