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

其他格式: JSON · Markdown 中文 · English
80%修复率
84%置信度
0证据数
2025-08-01首次发现

版本兼容性

版本状态引入弃用备注
3.10 active
3.11 active

根因分析

Starlette WebSocket 在未调用 accept 方法前尝试接收数据

English

Starlette WebSocket 在未调用 accept 方法前尝试接收数据

generic

解决方案

  1. 95% 成功率 先调用 accept 再接收数据
    await websocket.accept()
    data = await websocket.receive_text()
  2. 90% 成功率 在异步上下文管理器中处理
    async with websocket:
        await websocket.accept()
        async for message in websocket:
            ...

无效尝试

常见但无效的做法:

  1. 在 accept 前发送数据 90% 失败

    同样需要先 accept

  2. 忽略 accept 直接使用 receive 95% 失败

    WebSocket 连接未建立