IndexError : string index out of rangeの対処方法

講師
講師

本記事では、IndexError : string index out of rangeエラーが発生する原因と、解決策についていくつかのサンプルコードを用いて解説します。

IndexError : string index out of rangeが発生する原因

このエラーが発生するサンプルコードを見てみましょう。

list = ['A', 'B', 'C', 'D', 'E']
print(list[5])

このサンプルコードを実行すると、以下のようなエラーが発生します。

IndexError                                Traceback (most recent call last)
<ipython-input-1-4099f4d06a82> in <module>()
      1 list = ['A', 'B', 'C', 'D', 'E']
----> 2 print(list[5])

IndexError: list index out of range

ここでリスト要素の取得方法について確認しましょう。
リスト要素を取得するためには、インデックスを指定する必要があります。

リスト[インデックス]

インデックスは、1つ目の要素が0から始まり、1、2、3…と割り当てられます。またインデックスは負の値でも指定することが可能です。リストの最後の要素が-1となり、前の要素に向かって-2、-3…と割り当てられます。

ではサンプルコードに戻ってみましょう。

list = ['A', 'B', 'C', 'D', 'E']

サンプルコードで作成されたリスト要素のインデックスは、次のように割り当てられます。

要素インデックス(正) インデックス(負)
A0-5
B1-4
C2-3
D3-2
E4-1

ところがサンプルコードでは、5という存在しないインデックスを指定しています。

list = ['A', 'B', 'C', 'D', 'E']
print(list[5])

存在しないインデックスを指定している、つまり存在しない要素を取得しようとしているため、IndexError : string index out of rangeが発生します。ちなみにIndexError : string index out of rangeは、「インデックスエラー:範囲外の文字列インデックス」と訳すことができます。

<補足>

他の場合として、以下のサンプルコードについても触れておきます。

list = ['A', 'B', 'C', 'D', 'E']
index = len(list)
print(list[index])

このサンプルコードでも、同様にIndexError : string index out of rangeエラーが発生します。
原因は、以下の行です。

index = len(list)

len()関数は、引数のオブジェクトの長さや要素数を取得する関数です。サンプルコードの場合、引数に渡されたリストの要素数を取得します。変数indexには「5」が代入されますので、この変数を使ってリスト要素を取得しようとすると、存在しないインデックスとしてIndexError : string index out of rangeエラーが発生します。

IndexError : string index out of rangeの解決方法

サンプルコードを使って対処方法を解説します。

list = ['A', 'B', 'C', 'D', 'E']
print(list[5])

このコードでエラーを発生させないためには、存在するインデックスを指定して要素を取得します。

list = ['A', 'B', 'C', 'D', 'E']
print(list[4])

出力結果:E

list = ['A', 'B', 'C', 'D', 'E']
print(list[0])

出力結果:A

また、len()関数を使ってリスト要素を取得するとエラーが発生する例を解説しましたが、こちらの対処方法もご紹介します。
サンプルコード:

list = ['A', 'B', 'C', 'D', 'E']
index = len(list)
print(list[index])

こちらを実行すると、以下のようなエラーが発生します。

IndexError                                Traceback (most recent call last)
<ipython-input-2-38570f20535b> in <module>()
      1 list = ['A', 'B', 'C', 'D', 'E']
      2 index = len(list)
----> 3 print(list[index])
IndexError: list index out of range

対処法として、len()関数で取得した要素数から1引くという方法が挙げられます。

list = ['A', 'B', 'C', 'D', 'E']
index = len(list)
print(list[index - 1])

出力結果:E

講師
講師

いかがでしたか?記事ではリストを使用したサンプルコードを使用して解説しましたが、文字列やタプルなどの場合でも、存在しないインデックスを指定すると同様のエラーが発生します。似たエラーが発生した場合は、指定しているインデックスが存在するかを確認しましょう。


Startlabのプログラミング入門コースは、Python未経験者・初学者にもわかりやすいカリキュラムと続けやすいサポート体制が魅力。自分の学習目的に合っているか、どういった知識を身に付けることができるのかなど、無料カウンセリングでぜひご相談ください!カウンセリングは毎日実施中、お待ちしております!

無料カウンセリングを予約する