Comment réparer une IndexError en Python

Si vous utilisez Python, vous avez peut-être rencontré le IndexError
erreur en réponse à un code que vous avez écrit. Les IndexError
message en Python est une erreur d’exécution. Pour comprendre ce que c’est et comment y remédier, vous devez d’abord comprendre ce qu’est un index. Une liste Python (ou un tableau ou un dictionnaire) a un index. L’index d’un élément est sa position dans une liste. Pour accéder à un élément d’une liste, vous utilisez son index. Par exemple, considérez cette liste Python de fruits :
fruits = ["apple", "banana", "orange", "pear", "grapes", "watermelon"]
La plage de cette liste est 5, car un index en Python commence à 0.
- pomme : 0
- banane : 1
- orange : 2
- poire : 3
- raisins: 4
- pastèque : 5
Supposons que vous deviez imprimer le nom du fruit pear
de cette liste. Vous pouvez utiliser un simple print
déclaration, ainsi que le nom de la liste et l’index de l’élément que vous souhaitez imprimer :
>>> fruits = ["apple", "banana", "orange", "pear", "grapes", "watermelon"]
>>> print(fruits[3])
pear
Contents
Qu’est-ce qui cause une IndexError en Python ?
Que se passe-t-il si vous utilisez un numéro d’index en dehors de la plage de la liste ? Par exemple, essayez d’imprimer le numéro d’index 6 (qui n’existe pas) :
>>> fruits = ["apple", "banana", "orange", "pear", "grapes", "watermelon"]
>>> print(fruits[6])
Traceback (most recent call last):
File "", line 2, in
IndexError: list index out of range
Comme prévu, vous obtenez IndexError: list index out of range
en réponse.
Comment réparer IndexError en Python
La seule solution pour réparer le IndexError: list index out of range
erreur consiste à s’assurer que l’élément auquel vous accédez à partir d’une liste se trouve dans la plage de la liste. Vous pouvez y parvenir en utilisant le range()
une len()
les fonctions.
Les range()
La fonction génère des nombres séquentiels, commençant par 0 par défaut et s’arrêtant au nombre précédant la valeur spécifiée :
>>> n = range(6)
>>> for i in n:
print(i)
0
1
2
3
4
5
5
Les len()
fonction, dans le contexte d’une liste, renvoie le nombre d’éléments de la liste :
>>> fruits = ["apple", "banana", "orange", "pear", "grapes", "watermelon"]
>>> print(len(fruits))
6
Index de liste hors de portée
En utilisant range()
et len()
ensemble, vous pouvez éviter les erreurs d’index. Les len()
renvoie la longueur de la liste (6, dans cet exemple). En utilisant cette longueur avec range()
devient range(6)
qui renvoie les éléments aux index 0, 1, 2, 3, 4 et 5.
fruits = ["apple", "banana", "orange", "pear", "grapes", "watermelon"]
for i in range(len(fruits)):
print(fruits[i])
apple
banana
orange
pear
grapes
watermelon
Correction d’IndexError dans les boucles Python
Si vous ne faites pas attention, des erreurs d’index peuvent se produire dans les boucles Python. Considérez cette boucle :
>>> fruits = ["apple", "banana", "orange", "pear", "grapes", "watermelon"]
>>> n = 0
>>> while n <= len(fruits)
print(fruits[n])
n+=1
apple
banana
orange
pear
grapes
watermelon
Traceback (most recent call last):
File "", line 4, in
IndexError: list index out of range
La logique semble raisonnable. Vous avez défini n
en tant que variable de compteur, et vous avez défini la boucle pour qu’elle se produise jusqu’à ce qu’elle soit égale à la longueur de la liste. La longueur de la liste est de 6, mais sa plage est de 5 (car Python commence son index
à 0). L’état de la boucle est n <= 6
et donc lewhile
boucle s’arrête lorsque la valeur de n
est égal à 6 :
- Quand n vaut 0 => pomme
- Quand n vaut 1 => banane
- Quand n vaut 2 => orange
- Quand n vaut 3 => poire
- Quand n vaut 4 => raisins
- Quand n vaut 5 => pastèque
- Lorsque n vaut 6 => IndexError : index de la liste hors plage
Lorsque n
est égal à 6, Python produit un IndexError: list index out of range
Erreur.
Solution
Pour éviter cette erreur dans les boucles Python, utilisez uniquement l’opérateur < ("inférieur à"), arrêtant le while
boucle au dernier index de la liste. Il s’agit d’un nombre de moins que la longueur de la liste :
>>> fruits = ["apple", "banana", "orange", "pear", "grapes", "watermelon"]
>>> n = 0
>>> while n < len(fruits)
print(fruits[n])
n+=1
apple
banana
orange
pear
grapes
watermelon
Il existe un autre moyen de résoudre ce problème également, mais je vous laisse le découvrir.
Plus d’erreurs d’index Python
La cause ultime de IndexError
est une tentative d’accès à un élément qui n’existe pas dans une structure de données. En utilisant le range()
et len()
functions est une solution, et bien sûr gardez à l’esprit que Python commence à compter à 0, pas à 1.