Code Fix

初級

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つ超えてしまいます。

直し方: 32 にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン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()で長さを確認する習慣があると防げます。

直し方: 51 にします。

この問題を解いてみる →

パターン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ループでの定番の間違いです。

直し方: 43 にします。

この問題を解いてみる →

よくある誤解

「要素数と同じ数値まで使える」と思いがちですが、要素数3のリストで使える添字は0・1・2までです。range()の引数と添字の対応を混同すると起きやすいミスです。

まとめ

IndexError: list index out of rangeは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)