python
runtime_error
ai_generated
true
运行时错误:不能在 WebSocket 上调用 'receive' 之前调用 'accept'
RuntimeError: Cannot call 'receive' before 'accept' on a WebSocket
ID: python/starlette-websocket-accept-before-receive
80%修复率
84%置信度
0证据数
2025-08-01首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 3.10 | active | — | — | — |
| 3.11 | active | — | — | — |
根因分析
Starlette WebSocket 在未调用 accept 方法前尝试接收数据
English
Starlette WebSocket 在未调用 accept 方法前尝试接收数据
解决方案
-
95% 成功率 先调用 accept 再接收数据
await websocket.accept() data = await websocket.receive_text()
-
90% 成功率 在异步上下文管理器中处理
async with websocket: await websocket.accept() async for message in websocket: ...
无效尝试
常见但无效的做法:
-
在 accept 前发送数据
90% 失败
同样需要先 accept
-
忽略 accept 直接使用 receive
95% 失败
WebSocket 连接未建立