IndexError
は初心者がよく陥る典型的なエラーです。最初のうちはよくであることになるので、どういったエラーなのか見ていきましょう!
IndexErrorとは?
IndexError
は、Pythonプログラムでリストやタプル、文字列などのシーケンス型データに対して、無効なインデックスを使用したときに発生するエラーです。インデックスが範囲外の場合にこのエラーが発生します。以下に具体的なエラー詳細と例を5つ示します。
エラー詳細: IndexError: list index out of range
具体的にエラーが生じるコード
- リストの範囲外のインデックスへのアクセス:
my_list = [1, 2, 3]
print(my_list[3]) # IndexError: list index out of range
- タプルの範囲外のインデックスへのアクセス:
my_tuple = (4, 5, 6)
print(my_tuple[5]) # IndexError: tuple index out of range
- 文字列の範囲外のインデックスへのアクセス:
my_string = "hello"
print(my_string[10]) # IndexError: string index out of range
- 空のリストへのアクセス:
empty_list = []
print(empty_list[0]) # IndexError: list index out of range
- ネストされたリストの範囲外のインデックスへのアクセス:
nested_list = [[1, 2], [3, 4]]
print(nested_list[1][2]) # IndexError: list index out of range
これらの例は、IndexError
がリスト、タプル、文字列などのシーケンス型データの範囲外のインデックスを使用する場合に発生することを示しています。プログラムを実行する前にインデックスが適切であることを確認することが重要です。
解決方法
基本的な解決策は、インデックスアクセス前に要素の存在やリストの長さをチェックしてからアクセスするようにすることです。うまくlen
を使っていきましょう!
また、条件文を使用して、インデックスが範囲内にあることを確認してからアクセスすることで、IndexError
を回避できます。
それでは、それぞれのケースごとにIndexError
を避けるための解決策を説明します。
- リストの範囲外のインデックスへのアクセス:
my_list = [1, 2, 3]
if len(my_list) > 3:
print(my_list[3])
else:
print("Index is out of range.")
範囲外の場合はelseが実行されます。
- タプルの範囲外のインデックスへのアクセス:
my_tuple = (4, 5, 6)
if len(my_tuple) > 5:
print(my_tuple[5])
else:
print("Index is out of range.")
- 文字列の範囲外のインデックスへのアクセス:
my_string = "hello"
if len(my_string) > 10:
print(my_string[10])
else:
print("Index is out of range.")
- 空のリストへのアクセス:
empty_list = []
if len(empty_list) > 0:
print(empty_list[0])
else:
print("List is empty.")
- ネストされたリストの範囲外のインデックスへのアクセス:
nested_list = [[1, 2], [3, 4]]
if len(nested_list) > 1 and len(nested_list[1]) > 2:
print(nested_list[1][2])
else:
print("Index is out of range.")