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

Python3.7使用list[dict]等泛型类型提示时pytest运行报错如何解决

问题原因

该报错和pytest版本无关,是Python版本特性限制导致:list[dict]、dict[str, str]这类内置容器直接加泛型下标标注的语法,是Python 3.9才正式支持的特性,Python 3.7/3.8原生不支持该语法,运行时会直接抛出TypeError: 'type' object is not subscriptable错误。

可用解决方案

方案1:使用typing模块的泛型类型(兼容性最好)

从Python标准库的typing模块导入对应泛型类型替换内置类型,即可实现完全相同的精确类型标注效果,兼容Python 3.7及以上所有版本:

from typing import List, Dict # 按需导入需要的泛型类型

# 函数标注示例
def _get_options(self, property_options: List[Dict]) -> List[OptionInput]:
    # 业务逻辑
    pass

# 变量标注示例
ACCOUNT_IDS: Dict[str, str] = {"my_account": "123"}

方案2:开启future annotations特性

在每个使用新泛型语法的代码文件最顶部,添加如下导入语句:

from __future__ import annotations

添加后Python会将所有类型标注转为字符串延迟解析,运行时不会触发语法报错,你可以继续保留list[dict]、dict[str, str]的写法,各类静态类型检查工具依然可以正常识别标注内容。注意该导入仅对当前文件生效,需要每个用到新语法的文件单独添加。

方案3:升级Python版本

如果项目依赖允许,直接升级Python到3.9及以上版本,即可原生支持内置容器的泛型下标标注,无需任何额外配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:15:03