IndexError: list index out of range の原因と直し方
リストの範囲外の添字にアクセスしたときに出るエラーです。添字が0始まりであることの直接の帰結です。
エラーメッセージの読み方
Traceback (most recent call last):
main.py- ファイル名
2- 行番号 — 実際にクラッシュした行
<module>- 発生場所 — <module> ならトップレベル、関数名ならその関数の中
IndexError- 例外クラス — 何が起きたか。ここを検索するのが最短です
list index out of range- 詳細メッセージ — どの値が問題だったか
このエラーが出る典型パターン
パターン1
1 nums = [1, 2, 3] 2 print(nums[3 ]) ^
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(nums[3])
~~~~^^^
IndexError: list index out of range
リストの添字は0から始まり、最後の要素は「長さ-1」です。要素数と同じ値を指定すると1つ超えてしまいます。
直し方: 3 を 2 にします。
広告
広告スロット(未設定)
パターン2
1 names = ["a", "b"] 2 print(names[5 ]) ^
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(names[5])
~~~~~^^^
IndexError: list index out of range
存在する要素数を超えた添字を指定すると発生します。len()で長さを確認する習慣があると防げます。
直し方: 5 を 1 にします。
パターン3
1 fruits = ["apple", "banana", "cherry"] 2 for i in range(4 ): ^ 3 print(fruits[i])
Traceback (most recent call last):
File "main.py", line 3, in <module>
print(fruits[i])
~~~~~~^^^
IndexError: list index out of range
range(len(fruits))を使わず要素数を決め打ちすると、増減したときにずれます。forループでの定番の間違いです。
直し方: 4 を 3 にします。
よくある誤解
「要素数と同じ数値まで使える」と思いがちですが、要素数3のリストで使える添字は0・1・2までです。range()の引数と添字の対応を混同すると起きやすいミスです。
まとめ
IndexError: list index out of rangeは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。