# RuntimeError: 为同一异常类型注册了多个异常处理程序。

- **ID:** `python/starlette-runtime-error-multiple-exception-handlers`
- **领域:** python
- **类别:** config_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

为同一个异常类（例如 HTTPException）添加了两个或多个异常处理程序。

## 版本兼容性

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

## 解决方案

1. **Consolidate handlers into one** (90% 成功率)
   ```
   from starlette.exceptions import HTTPException
from starlette.responses import JSONResponse
async def custom_handler(request, exc):
    return JSONResponse({'error': str(exc.detail)}, status_code=exc.status_code)
app.add_exception_handler(HTTPException, custom_handler)
   ```
2. **Use middleware instead of multiple handlers** (85% 成功率)
   ```
   from starlette.middleware.base import BaseHTTPMiddleware
class ErrorMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        try:
            response = await call_next(request)
        except HTTPException as exc:
            return JSONResponse({'error': exc.detail}, status_code=exc.status_code)
        return response
   ```

## 无效尝试

- **Removing all handlers and adding only one** — May lose custom error responses. (50% 失败率)
- **Using different exception classes** — Doesn't solve duplicate registration. (60% 失败率)
