MENU

Pythonの「IndexError: list index out of range」の直し方

Pythonでリストを扱っていると、よく出てくるエラーが
「IndexError: list index out of range」です。

最初は意味が分かりにくいですが、原因はシンプルです。


目次

■ このエラーの正体

このエラーは、

「存在しない場所(インデックス)を取りに行っている」

という意味です。

例えば、こんなコードです。

numbers = [10, 20, 30]

print(numbers[3]) # エラーになる

なぜエラーになるのか?

リストの中身はこうなっています。

インデックス
010
120
230

つまり、

  • 最大のインデックスは「2」
  • でも「3」を取りに行っている

→ 存在しないのでエラー


■ よくある原因3パターン

① 範囲外アクセス

items = ["A", "B", "C"]

print(items[5]) # 存在しない

👉 対策:長さを確認する

items = ["A", "B", "C"]

if len(items) > 2:
    print(items[2])

② ループの書き方ミス

numbers = [1, 2, 3]

for i in range(len(numbers) + 1): # + 1 が余計
    print(numbers[i])

👉 対策:rangeの上限に注意

numbers = [1, 2, 3]

for i in range(len(numbers)):
    print(numbers[i]) # 正しい

③ 空リストを扱っている

data = []

print(data[0]) # 要素がない

👉 対策:中身があるか確認

data = []

if data: # 空でなければTrue
    print(data[0])
else:
    print("データがありません")

■ より安全な書き方(おすすめ)

実は、インデックスを直接使わない方が安全です。

numbers = [10, 20, 30]

for value in numbers:
    print(value) # インデックスを使わない

👉 この書き方なら
そもそも範囲外アクセスが起きません。


■ try-exceptでエラーを防ぐ方法

どうしても例外が出る可能性がある場合はこうします。

numbers = [10, 20, 30]

try:
    print(numbers[5])
except IndexError:
    print("範囲外アクセスです")

👉 「落ちないコード」を作るときに有効です。


■ IndexErrorの本質

このエラーは単なるミスではなく、

「データの範囲を意識していない」状態

を教えてくれています。

プログラミングでは、

  • データはいくつあるのか?
  • どこまでアクセスしていいのか?

この「範囲感覚」がとても重要です。


■ まとめ

  • IndexErrorは「存在しない位置へのアクセス」
原因は主に3つ
  • 範囲外アクセス
  • ループのミス
  • 空リスト
対策
  • len()で確認
  • 安全なループを書く
  • try-exceptで保険をかける

このエラーは初心者が必ず通るポイントですが、
ここを理解するとコードの安定性が一気に上がります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

プログラミングは「すごい知識」より「使える知識」が価値になります。

このブログでは、Pythonを中心に初心者でも使えるシンプルなコードと考え方を発信しています。

目次