类型错误:'type' 对象不支持下标操作 Python

3
每当我尝试对字符串列表进行类型提示时,例如:
tricks: list[str] = []

我遇到了TypeError: 'type' object is not subscriptable的错误。我正在跟随一个课程,他们使用相同的代码,但是它对他们有效。所以我猜问题可能是我的环境和课程环境之间的差异之一。我使用:

  • vs code
  • anaconda
  • python 3.8.15
  • jupyter notebook

有人能帮我解决这个问题吗?

我在普通的.py文件中使用了相同的代码,但仍然不起作用,所以那可能不是问题所在。 Python版本也不应该是问题,因为这是基本的。 Anaconda也不应该导致这样的错误消息。 剩下的就是vscode和pycharm之间的差异,这也很奇怪。 因此,我不知道该尝试什么。


2
list[str] = [] 这不是正确的类型提示格式。请展示您的实际代码和完整的错误信息。 - John Gordon
1
请提供一个最小可复现示例,以便我们能够帮助您。 - Fractalism
1
list[str] 就像调用 list.__getitem__(str),也就是直接向 list _类_(而不是它的实例)询问使用键 str(即字符串类本身)查找某个元素。这可能不是你想要的结果。 - Alexander
4
@Alexander:在Python 3.9+中,list[str]实际上是完全有效的 - user2357112
1
@Alexander 不,它会像 type.__getitem__(list, str) 这样。Python 3 引入了 __class_getitem__,这样(据我所知)你可以定义这个语法的含义,而不必定义一个特殊的元类。 - chepner
显示剩余4条评论
2个回答

12

您使用的是旧版本的Python。在Python 3.9中,list[str]仅适用于类型提示标准集合中。在此之前,您需要使用typing.List

from typing import List

tricks: List[str] = []

如果您正在学习使用Python 3.9中引入的功能的课程,则应该获得至少为3.9的Python版本。


2

Python 3.8 尝试对类型为 type 的列表进行下标操作。 以下方法可解决该问题:

from typing import List
tricks: List[str] = []

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接