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

新手上路,请多包涵

我有多个文件需要加载,所以我使用 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))

原文由 Chanヨネ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 619
2 个回答

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

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

但是,您已经设法偶然发现了一个已存在于 Python 中的名称。

因为 dict 是 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))

原文由 b4hand 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Elad Rubi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题