1. ホーム
  2. python

[解決済み] TypeError: ディクショナリーへのインデックス作成時に 'type' オブジェクトが添え字にならない

2022-03-02 16:12:35

質問

複数のファイルを読み込む必要があるため、私は 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))

解決方法は?

通常、Pythonは次のように投げます。 NameError が定義されていない場合、その変数が使用されます。

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

しかし、あなたはPythonにすでに存在する名前につまずいたのです。

なぜなら dict は、Pythonの組み込み型の名前です。 というエラーメッセージが表示されますが、実際はそうではありません。

の型は dicttype . Pythonではすべての型がオブジェクトです。したがって、あなたは実際に type オブジェクトを作成します。これが、エラーメッセージに "'type' object is not subscriptable." と表示されている理由です。

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