Site icon Maniac Geek

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

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 <= 6et 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.

Source

Quitter la version mobile