本記事では、IndexError: list index out of rangeとIndexError: string index out of rangeの原因と対処法をご紹介します。
原因
リスト、文字列の要素にアクセスしようとした際に、その要素が存在しない場合に発生するエラーです。
このエラーが発生する原因としては、以下の例が挙げられます。
- リスト/文字列の要素にアクセスする際に使用したインデックスが、要素の長さ以上の値の場合
よくある原因
要素の長さを確認せずインデックスを指定していることが原因です。
あるケースが以下の通りです。
注意点として、インデックスは先頭からアクセスする場合0から始まり、末尾からアクセスする場合は-1から始まります。
このため、以下のようなケースでエラーが発生します。
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
確認項目
-
アクセスする際のインデックスが、要素の長さを超えない実装になっているか?
0 件のコメント :
コメントを投稿