You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:30:04