我需要加载多个文件,所以我使用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))
3条答案
按热度按时间dgenwo3n1#
通常,如果变量没有定义,Python会抛出
NameError
:然而,您已经设法偶然发现了Python中已经存在的名称。
因为
dict
是Python中一个内置类型的名称,所以你会看到一个奇怪的错误消息,但实际上不是。dict
的类型是type
。Python中的所有类型都是对象。因此,你实际上是试图索引到type
对象中。这就是为什么错误消息说"'type'对象是不可订阅的”。请注意,您可以盲目地为
dict
名称赋值,但您**实际上并不想这么做。**这只会在以后给您带来问题。问题的真正根源在于,你必须在使用变量之前对其进行赋值,如果你只是简单地对问题的陈述进行重新排序,几乎肯定会奏效:
pjngdqdw2#
您应该更新到
python >= 3.9
,这样一切都会正常工作ruarlubt3#
当我偶然发现这个错误时,我有这个函数:
我的想法是创建一个函数,它接受两个Pandas Dataframe 和一个整数,并返回一个浮点数元组。
就像其他答案所陈述的那样,在Python中,一切都是对象,甚至类本身也是对象。类反过来是蓝图对象,可以用来生成新对象,因此类可以被赋给变量,作为参数传递,并通过
type()
函数编程构造。这个类别相当于:
当你传递给一个函数一个不支持通过索引访问值的对象(不重载[]运算符)时,会出现“object is not subscriptable”错误。由于所有类的类型都是
<class "type">
:那么type object is not subscriptable意味着你传递的是class而不是一个实际的对象。这可能会更棘手,在我上面的函数中,我传递了有效的 Dataframe ,并且我的错误出现了,因为我试图将返回类型注解为
tuple[float]
,虽然这个语法在我看来应该是法律的的,但解释器理解这个表达式就好像我想索引元组类本身一样。结论
出现此错误的原因:
您可以查看此tutorial by mCoding,以了解有关作为对象的类的更多信息。