在 Python 中,HTTPException 并不是一个内置的标准异常类,但在某些 Web 框架(如 FastAPI、Starlette 或 Flask 的某些扩展)中,HTTPException 是一个常用的异常类,用于表示 HTTP 错误响应。
下面我将以 FastAPI 为例,详细说明 HTTPException 的用法。
FastAPI 中的 HTTPException
FastAPI 是基于 Starlette 构建的,它提供了 HTTPException 类来处理 HTTP 错误。
基本用法
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int):
if item_id == 1:
raise HTTPException(status_code=404, detail="Item not found")
return {"item_id": item_id}
说明
status_code:HTTP 状态码,404表示“未找到”,400表示“错误请求”,500表示“内部服务器错误”等。detail:错误详情,可以是字符串、字典或其他可序列化的对象。
常见 HTTP 状态码
| 状态码 | 含义 |
|---|---|
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 422 | Unprocessable Entity |
| 500 | Internal Server Error |
自定义错误响应
你可以返回更详细的错误信息:
raise HTTPException(
status_code=400,
detail={
"error": "Invalid input",
"message": "The provided data is not valid."
}
)
捕获和处理 HTTPException
你可以使用 try-except 块来捕获 HTTPException:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int):
try:
if item_id == 1:
raise HTTPException(status_code=404, detail="Item not found")
return {"item_id": item_id}
except HTTPException as e:
# 处理异常
return {"error": str(e.detail)}
其他框架中的类似异常
- Flask:使用
abort()函数或HTTPException的子类(如NotFound、BadRequest)。 - Django:使用
Http404异常。 - Starlette:直接提供
HTTPException类,FastAPI 基于它构建。
HTTPException是 Web 框架中用于表示 HTTP 错误的异常类。- 在 FastAPI 中,它非常常用,可以通过
status_code和detail参数自定义错误响应。 - 你可以根据需要捕获和处理这些异常,以提供更友好的错误提示。
如果你有特定的框架或场景,请告诉我,我可以提供更详细的示例。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/477503.html



