异常 - HTTPException
和 WebSocketException
¶
这些是您可以引发的异常,以向客户端显示错误。
当您引发异常时,就像在正常的 Python 中一样,其余的执行将被中止。这样您就可以在代码中的任何地方引发这些异常,以中止请求并将错误显示给客户端。
您可以使用
HTTPException
WebSocketException
这些异常可以从 fastapi
中直接导入
from fastapi import HTTPException, WebSocketException
fastapi.HTTPException ¶
HTTPException(status_code, detail=None, headers=None)
基类:HTTPException
您可以在自己的代码中引发的 HTTP 异常,以向客户端显示错误。
这是针对客户端错误、无效身份验证、无效数据等,而不是针对代码中的服务器错误。
在 FastAPI 处理错误文档 中了解更多信息。
示例¶
from fastapi import FastAPI, HTTPException
app = FastAPI()
items = {"foo": "The Foo Wrestlers"}
@app.get("/items/{item_id}")
async def read_item(item_id: str):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
return {"item": items[item_id]}
参数 | 描述 |
---|---|
status_code
|
要发送到客户端的 HTTP 状态码。
类型: |
detail
|
要发送到客户端的任何数据,在 JSON 响应的
类型: |
headers
|
要发送到客户端的响应中的任何标头。
类型: |
fastapi/exceptions.py
中的源代码
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|
fastapi.WebSocketException ¶
WebSocketException(code, reason=None)
基类:WebSocketException
您可以在自己的代码中引发的 WebSocket 异常,以向客户端显示错误。
这是针对客户端错误、无效身份验证、无效数据等,而不是针对代码中的服务器错误。
有关更多信息,请参阅 FastAPI WebSocket 文档。
示例¶
from typing import Annotated
from fastapi import (
Cookie,
FastAPI,
WebSocket,
WebSocketException,
status,
)
app = FastAPI()
@app.websocket("/items/{item_id}/ws")
async def websocket_endpoint(
*,
websocket: WebSocket,
session: Annotated[str | None, Cookie()] = None,
item_id: str,
):
if session is None:
raise WebSocketException(code=status.WS_1008_POLICY_VIOLATION)
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Session cookie is: {session}")
await websocket.send_text(f"Message text was: {data}, for item ID: {item_id}")
参数 | 描述 |
---|---|
代码
|
来自 规范中定义的有效代码 的关闭代码。
类型: |
原因
|
关闭 WebSocket 连接的原因。 它是 UTF-8 编码的数据。原因的解释由应用程序决定,WebSocket 规范中没有规定。 它可能包含对人类可读或可被客户端代码解释的文本等。
类型: |
fastapi/exceptions.py
中的源代码
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
|