# 属性错误: 'State' 对象没有属性 'db'

- **ID:** `python/starlette-state-access-error`
- **领域:** python
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

尝试访问Starlette应用state对象中未设置的属性，例如数据库连接。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 3.x | active | — | — |

## 解决方案

1. **在应用启动事件中初始化state属性** (95% 成功率)
   ```
   from starlette.applications import Starlette; app = Starlette(); @app.on_event('startup') async def startup(): app.state.db = await create_db_connection()
   ```
2. **在访问前检查属性是否存在** (90% 成功率)
   ```
   if hasattr(app.state, 'db'): await app.state.db.execute(query)
   ```

## 无效尝试

- **在路由中直接使用app.state.db而未初始化** — state对象为空。 (90% 失败率)
- **使用全局变量存储数据库连接** — 可能导致连接泄露。 (70% 失败率)
