Pythonでリストを扱っていると、よく出てくるエラーが
「IndexError: list index out of range」です。
最初は意味が分かりにくいですが、原因はシンプルです。
目次
■ このエラーの正体
このエラーは、
「存在しない場所(インデックス)を取りに行っている」
という意味です。
例えば、こんなコードです。
numbers = [10, 20, 30]
print(numbers[3]) # エラーになるなぜエラーになるのか?
リストの中身はこうなっています。
| インデックス | 値 |
|---|---|
| 0 | 10 |
| 1 | 20 |
| 2 | 30 |
つまり、
- 最大のインデックスは「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で保険をかける
このエラーは初心者が必ず通るポイントですが、
ここを理解するとコードの安定性が一気に上がります。

