fastapi 错误处理
时间: 2024-12-30 16:22:14 浏览: 12
### FastAPI 中的错误处理
在 FastAPI 应用程序中,有效的错误处理对于确保应用程序健壮性和用户体验至关重要。通过合理的异常捕获和响应返回机制,可以提升系统的可靠性和安全性。
#### 使用 HTTPException 抛出特定状态码
当需要抛出自定义HTTP错误时,推荐使用 `fastapi.HTTPException` 类。这允许指定HTTP状态码以及详细的错误消息给客户端[^1]。
```python
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id not in items_db:
raise HTTPException(status_code=404, detail="Item not found")
return {"item": items_db[item_id]}
```
#### 添加全局异常处理器
为了更优雅地管理未被捕获的异常情况,可以在应用级别注册通用的异常处理器。这样即使发生意外状况也能向用户提供友好的反馈信息而不是暴露内部实现细节[^3]。
```python
from starlette.requests import Request
from fastapi.responses import JSONResponse
@app.exception_handler(Exception)
async def validation_exception_handler(request: Request, exc: Exception):
return JSONResponse(
status_code=500,
content={"message": str(exc)},
)
```
#### 自定义异常类
创建专门针对业务逻辑需求定制化的异常类型有助于提高代码可读性,并使不同类型的失败场景更容易区分。这些自定义异常同样应该继承于标准库中的BaseException或其子类[^4]。
```python
class ItemNotFoundError(Exception):
"""Raised when the item is not found."""
def get_item_or_404(item_id: int):
try:
return items_db[item_id]
except KeyError as e:
raise ItemNotFoundError(f"Item with id {item_id} does not exist.") from e
```
阅读全文