J'ai plusieurs fichiers à charger, donc j'utilise un dict
pour raccourcir les choses. Quand je cours, je reçois un
TypeError: 'type' object is not subscriptable
Erreur. Comment puis-je faire en sorte que cela fonctionne?
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))
Normalement Python lance NameError
si la variable n'est pas définie:
>>> d[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined
Cependant, vous avez réussi à tomber sur un nom qui existe déjà en Python.
Parce que dict
est le nom d'un type intégré en Python vous voyez ce qui semble être un étrange message d'erreur, mais en réalité ce n'est pas le cas.
Le type de dict
est un type
. Tous les types sont des objets en Python. Ainsi, vous essayez en fait d'indexer dans l'objet type
. C'est pourquoi le message d'erreur indique que "l'objet" type "n'est pas indexable."
>>> type(dict)
<type 'type'>
>>> dict[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'type' object is not subscriptable
Notez que vous pouvez affecter aveuglément le nom dict
, mais vous ne voulez vraiment pas faire cela. Cela va juste provoquer vous problèmes plus tard.
>>> dict = {1:'a'}
>>> type(dict)
<class 'dict'>
>>> dict[1]
'a'
La véritable source du problème est que vous devez affecter des variables avant d'essayer de les utiliser. Si vous réorganisez simplement les énoncés de votre question, cela fonctionnera presque certainement:
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))