[Python] IndexError: list index out of range, IndexError: string index out of rangeの原因と対処法

2022年12月3日土曜日

Python

本記事では、IndexError: list index out of rangeとIndexError: string index out of rangeの原因と対処法をご紹介します。

 
アイキャッチ

原因

リスト、文字列の要素にアクセスしようとした際に、その要素が存在しない場合に発生するエラーです。
このエラーが発生する原因としては、以下の例が挙げられます。

  1. リスト/文字列の要素にアクセスする際に使用したインデックスが、要素の長さ以上の値の場合

よくある原因

要素の長さを確認せずインデックスを指定していることが原因です。

あるケースが以下の通りです。
注意点として、インデックスは先頭からアクセスする場合0から始まり、末尾からアクセスする場合は-1から始まります。

index

このため、以下のようなケースでエラーが発生します。

my_list = ['a', 'b', 'c']

print(len(my_list)) # 3
print(my_list[0])   # a
print(my_list[-1])  # c
print(my_list[-3])  # a

print(my_list[3])   # IndexError: list index out of range
print(my_list[-4])  # IndexError: list index out of range

上記の通り、先頭からアクセスする場合と、末尾からアクセスする場合でインデックスの数値が異なります。
混同すると予期せぬエラーが発生します。

文字列でも同様に以下のようなケースでエラーが発生します。

my_string = "Hello! world"

print(len(my_string)) # 12
print(my_string[0])   # H
print(my_string[11])  # d
print(my_string[-1])  # d
print(my_string[-12]) # H

print(my_string[12])  # IndexError: string index out of range
print(my_string[-13]) # IndexError: string index out of range

対処法

リスト/文字列の長さを確認しインデックスが長さを超過していないか確認することで安全な実装となります。

my_list = ['a', 'b', 'c']

list_len = len(my_list)

indexs = [0,1,2,3]

for i in indexs:
  if i < list_len:
    print('accessible. index:', i)
    print(my_list[-i])
  else:
    print('inaccessible. index:', i)

# 出力結果
accessible. index: 0
a
accessible. index: 1
c
accessible. index: 2
b
inaccessible. index: 3

確認項目

  1. アクセスする際のインデックスが、要素の長さを超えない実装になっているか?

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology