# RuntimeError: Cannot call 'receive' before 'accept' on a WebSocket

- **ID:** `python/starlette-websocket-accept-before-receive`
- **Domain:** python
- **Category:** runtime_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

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

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 3.10 | active | — | — |
| 3.11 | active | — | — |

## Workarounds

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

## Dead Ends

- **在 accept 前发送数据** — 同样需要先 accept (90% fail)
- **忽略 accept 直接使用 receive** — WebSocket 连接未建立 (95% fail)
