TypeError:索引到字典时,'type'对象不可订阅

Cha*_*nヨネ 14 python dictionary python-3.x

我有多个文件需要加载,所以我用a dict来缩短内容.当我运行时,我得到一个"TypeError:'type'对象不可订阅"错误.我怎样才能让它发挥作用?

TypeError: 'type' object is not subscriptable 
Run Code Online (Sandbox Code Playgroud)

Ela*_*ubi 52

你应该更新到python >= 3.9 ,一切都会正常进行

  • 这是一个与类型注释无关的问题的解决方案,该问题会产生相同的错误;**不是OP的问题**。 (16认同)
  • @Mayou36要继续使用python3.8,您必须更改代码以支持该版本。`list[str]` 不能直接使用。相反,导入 `List` - `fromtypes import List`,然后以类似的方式使用它 - `List[str]` (10认同)
  • 事实上,这对我来说非常有用!我从`python=3.8`更新到`python=3.9`,问题解决了。它抱怨“list”不可订阅。 (6认同)
  • 虽然可能是真的,但这既不能解释任何事情,也不能提供真正的解决方案。如果我需要继续使用 Python < 3.9 怎么办? (2认同)

b4h*_*and 24

通常,NameError如果未定义变量,则抛出Python :

>>> d[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined
Run Code Online (Sandbox Code Playgroud)

但是,您已经设法偶然发现Python中已存在的名称.

因为dict是Python中内置类型的名称,您看到的似乎是一个奇怪的错误消息,但实际上并非如此.

类型dicttype.所有类型都是Python中的对象.因此,您实际上是在尝试索引type对象.这就是错误消息说"'type'对象不可订阅的原因."

>>> type(dict)
<type 'type'>
>>> dict[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'type' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

请注意,您可以盲目地分配dict名称,但实际上并不想这样做.它会在以后引起你的问题.

>>> dict = {1:'a'}
>>> type(dict)
<class 'dict'>
>>> dict[1]
'a'
Run Code Online (Sandbox Code Playgroud)

问题的真正根源是您必须在尝试使用变量之前分配变量.如果你只是重新排序你的问题的陈述,它几乎肯定会起作用:

d = {1: "walk1.png", 2: "walk2.png", 3: "walk3.png"}
m1 = pygame.image.load(d[1])
m2 = pygame.image.load(d[2])
m3 = pygame.image.load(d[3])
playerxy = (375,130)
window.blit(m1, (playerxy))
Run Code Online (Sandbox Code Playgroud)