Python运行报TypeError: 'type' object is not subscriptable修复方法
报错原因
报错由函数定义处的返回值类型注解list[str]触发。
Python 3.9版本才正式落地PEP 585规范,支持直接对list/dict/tuple这类内置容器类型使用下标写法编写泛型类型注解。如果你的运行环境是Python 3.8或更早版本,内置list本身是普通类型对象,不支持[]下标语法做类型标注,函数定义阶段解析注解时就会抛出'type' object is not subscriptable错误,和函数内部的逻辑实现没有关系。
修复方案
根据自己的运行环境选任意一种即可:
- 升级Python解释器到3.9及以上版本
升级后原生支持list[str]这类泛型注解写法,现有代码无需任何修改就能正常运行。 - 启用延迟注解求值(适用Python 3.7及以上版本)
在当前Python文件的最顶部添加一行导入:
该导入会让文件内所有类型注解不在运行时解析,仅作为静态类型提示存在,不会触发下标解析错误,同时完全兼容mypy、pyright等主流类型检查工具的校验逻辑。from __future__ import annotations - 使用typing模块的兼容泛型类型(全Python3版本通用)
从标准库typing模块导入大写开头的泛型类型替换内置类型即可,修改后代码如下:
这种写法在Python 3.9+版本中也依然被支持,不会出现兼容性问题。from typing import List def inputs_string_to_list(inputs_string: str) -> List[str]: """ Convert a string with comma-separated items into a list of strings. :param inputs_string: a string with comma-separated items :return: list of strings """ return [input_.strip() for input_ in inputs_string.split(",")]
内容的提问来源于stack exchange,提问作者Zephrey
相关产品推荐
相关产品推荐

