FASTAPI系列 19返回异常处理
前言
某些情况下,需要向客户端返回错误提示。这里所谓的客户端包括前端浏览器、其他应用程序、物联网设备等。需要向客户端返回错误提示的场景主要如下:
- 遇到这些情况时,通常要返回 4XX(400 至 499)HTTP 状态码。
- 4XX 状态码与表示请求成功的 2XX(200 至 299) HTTP 状态码类似。只不过,4XX 状态码表示客户端发生的错误。
一、使用 HTTPException
向客户端返回 HTTP 错误响应,可以使用 HTTPException。
from fastapi import FastAPI, HTTPException
app = FastAPI()
person= {"Name": "Teacher_Li"}
@app.get("/person/{get_name}")
async def get_person(name: str):
if name not in person:
raise HTTPException(status_code=404, detail="person not found")
return {"name": person[name]}
二、HTTPException的使用
HTTPException 是额外包含了和 API 有关数据的常规 Python 异常。因为是 Python 异常,所以不能 return,只能 raise。在调用_路径操作函数_里的工具函数时,触发了 HTTPException,FastAPI 就不再继续执行_路径操作函数_中的后续代码,而是立即终止请求,并把 HTTPException 的 HTTP 错误发送至客户端。
raise HTTPException(status_code=404, detail="person not found")
三、响应结果
请求为 http://localhost/person/Teacher_Li(name为 Teacher_Li)时,客户端会接收到 HTTP 状态码200 及如下 JSON 响应结果:
{
"item": "The Foo Wrestlers"
}
但如果客户端请求 http://localhost/person/Teacher(name「Teacher」 不存在时),则会接收到 HTTP 状态码404(「未找到」错误)及如下 JSON 响应结果:
{
"detail": "person not found"
}
引起 HTTPException 时,可以用参数 detail 传递任何能转换为 JSON 的值,不仅限于 str。
还支持传递 dict、list 等数据结构。FastAPI 能自动处理这些数据,并将之转换为 JSON。
总结
本文介绍了在FastAPI应用中如何通过使用HTTPException来实现对客户端的异常返回处理,以应对特定的错误场景