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']
サンプルコードで作成されたリスト要素のインデックスは、次のように割り当てられます。
要素 | インデックス(正) | インデックス(負) |
---|---|---|
A | 0 | -5 |
B | 1 | -4 |
C | 2 | -3 |
D | 3 | -2 |
E | 4 | -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未経験者・初学者にもわかりやすいカリキュラムと続けやすいサポート体制が魅力。自分の学習目的に合っているか、どういった知識を身に付けることができるのかなど、無料カウンセリングでぜひご相談ください!カウンセリングは毎日実施中、お待ちしております!