FastAPI使用APIRouter时Annotated默认值报错问题咨询
FastAPI 0.95.0 + APIRouter 下 Annotated Query 默认值触发 AssertionError 问题解析
这不是FastAPI的Bug,是特定版本下的用法兼容问题,根源在于你对带默认值的Annotated Query参数的写法不符合该版本的解析逻辑。
问题原因
在FastAPI 0.95.0版本中,当你在APIRouter的路径操作函数里,同时使用Annotated[str, Query(...)]并给参数设置外部默认值(比如= "a")时,FastAPI内部的断言机制会检测到参数的必填标记(Query(...)表示该参数为必填项)与外部默认值的存在产生冲突,因此触发AssertionError。而移除外部默认值后,参数的必填属性与定义一致,断言通过,所以恢复正常。
正确写法
你需要将默认值直接传入Query的参数中,而非放在Annotated外部作为参数默认值。示例代码如下:
from fastapi import APIRouter, Query, Annotated router = APIRouter() @router.get("/test") def test(q: Annotated[str, Query(default="a")]): return {"q": q}
注:设置default后参数会变为可选属性,若要保留必填逻辑,无需设置default,仅使用Query(...)即可。
额外解决方案
如果你偏好原写法,也可以将FastAPI版本升级到0.100.0及以上,后续版本已经修复了这个兼容问题,支持Annotated[str, Query(...)] = "a"这种写法在APIRouter中正常运行。
内容的提问来源于stack exchange,提问作者Amin Ba
相关产品推荐
相关产品推荐

