2014-11-14 1 views
4

У меня есть несколько файлов, которые мне нужно загрузить, поэтому я использую dict, чтобы сократить количество вещей. Когда я запускаю, я получаю объект TypeError: type, который не подлежит индексированию. Ошибка. Как я могу заставить это работать?ТипError: объект type не подлежит индексированию при индексировании в словаре

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

Вы хотите назначить 'dict' перед ссылками в предыдущих строках? Попробуйте переместить 4-ю строку до первой строки. – b4hand

ответ

11

Обычно Python бросает NameError, если переменная не определена:

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

Тем не менее, удалось наткнуться на имя, которое уже существует в Python.

Потому что dict 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))