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

为何嵌套Annotated的Sequence类型别名触发mypy valid-type错误?

问题原因解析

这既不是PEP 593的规定限制,完全是mypy实现层面的简化处理,具体细节如下:

  • mypy对泛型类型参数的校验逻辑存在局限:当你直接在Sequence[]内部嵌套Annotated[int | None, Field(strict=True)]时,mypy会将Annotated里的运行时元数据(Field(strict=True)实例)视为类型表达式的一部分,但它在处理泛型参数时,默认只接受纯粹的类型构造,不允许包含运行时实例的复杂嵌套结构。
  • 另外两种写法能正常通过校验的原因:
    1. 直接定义Annotated类型别名:mypy会专门处理顶层的Annotated结构,能正确区分类型部分和元数据部分,因此可以识别为合法类型。
    2. 使用已定义的MyAnnotatedType作为泛型参数:此时传给Sequence[]的是一个已被mypy标记为合法类型的别名,相当于把带元数据的Annotated包装成了简单类型引用,绕过了泛型参数内部的校验限制。

简言之,mypy当前实现暂不支持在泛型参数位置直接嵌套带运行时元数据的Annotated,但允许先将其定义为类型别名再使用。

内容的提问来源于stack exchange,提问作者qix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:12:06