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

2024-09-24 22:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个文件需要加载,所以我使用dict来缩短时间。当我跑的时候我得到一个

TypeError: 'type' object is not subscriptable 

错误。我怎样才能让它工作?

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

Tags: 文件imageobjectpngistype时间not
1条回答
网友
1楼 · 发布于 2024-09-24 22:27:45

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

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

然而,您却偶然发现了Python中已经存在的一个名称。

因为^{} is the name of a built-in type in Python您看到的似乎是一条奇怪的错误消息,但实际上并非如此。

dict的类型是type。所有类型都是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

请注意,您可以盲目地指定dict名称,但您确实不想这样做。这只会在以后给您带来问题。

>>> dict = {1:'a'}
>>> type(dict)
<class 'dict'>
>>> dict[1]
'a'

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

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))

相关问题 更多 >