TypeError: el objeto ‘type’ no se puede subscribir cuando se indexa en un diccionario

Tengo varios archivos que necesito cargar, así que estoy usando un dict para acortar las cosas. Cuando ejecuto obtengo un error “TypeError: ‘type’ no es un subíndice”. ¿Cómo puedo conseguir que esto funcione?

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

Related of "TypeError: el objeto ‘type’ no se puede subscribir cuando se indexa en un diccionario"

Normalmente, Python lanza NameError si la variable no está definida:

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

Sin embargo, has logrado encontrar un nombre que ya existe en Python.

Como dict es el nombre de un tipo incorporado en Python , está viendo lo que parece ser un extraño mensaje de error, pero en realidad no lo es.

El tipo de dict es un type . Todos los tipos son objetos en Python. Por lo tanto, en realidad estás tratando de indexar en el objeto de type . Esta es la razón por la que el mensaje de error dice que el objeto “‘tipo’ no se puede subscribir”.

 >>> type(dict)  >>> dict[0] Traceback (most recent call last): File "", line 1, in  TypeError: 'type' object is not subscriptable 

Tenga en cuenta que puede asignar a ciegas el nombre del dict , pero realmente no desea hacerlo. Solo te va a causar problemas más tarde.

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

La verdadera fuente del problema es que debe asignar variables antes de intentar usarlas. Si simplemente reordena las declaraciones de su pregunta, es casi seguro que funcionará:

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