python
runtime_error
ai_generated
true
类型错误: 'HTTPException' 对象不可调用
TypeError: 'HTTPException' object is not callable
ID: python/starlette-http-exception-not-callable
80%修复率
85%置信度
0证据数
2024-03-15首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 3.x | active | — | — | — |
根因分析
在Starlette或FastAPI中,将HTTPException实例(而非异常类)作为依赖项或中间件传递时,框架会尝试调用它,从而引发类型错误。
English
当在Starlette或FastAPI中将HTTPException实例(而非异常类)作为依赖项或中间件传递时,框架尝试调用它,导致类型错误。
解决方案
-
95% 成功率 使用Starlette的HTTPException类作为异常抛出,而非作为返回值
from starlette.exceptions import HTTPException; raise HTTPException(status_code=404, detail='Not found')
-
90% 成功率 在依赖项中返回Response对象替代异常实例
from starlette.responses import JSONResponse; return JSONResponse(status_code=404, content={'detail': 'Not found'})
无效尝试
常见但无效的做法:
-
尝试将HTTPException作为函数导入并直接调用
70% 失败
HTTPException是类,不是函数,直接调用不会触发异常,但作为依赖项仍会出错。
-
在依赖项中使用raise HTTPException而不是return
60% 失败
在依赖项中raise会立即中断请求,但若返回实例则仍会引发错误。