Corriger l'erreur IndexError: List Index Out of Range

Table des matières

Introduction

  1. La fonction Index ()

1.1 Indexation « avant » de la liste

1.2 Indexation « arrière » de la liste

  1. Que signifie l'erreur index out of range ?
  2. Le problème: indexerror: index out of range
  3. Exemples, scénarios et solutions

4.1.1 Scénario 1 : Listes indexées à partir de 0

4.1.2 Scénario 2 : Oubli de la fonction range()

Conclusion

Introduction

Les indexErrors sont l'un des types d'erreurs d'exécution les plus courants en Python. Ils sont déclenchés lorsque vous essayez d'accéder à une valeur d'index dans une liste Python qui n'existe pas. Dans la plupart des cas, les erreurs d'index sont faciles à résoudre. Vous avez juste besoin de faire un peu de débogage.

Dans ce tutoriel, nous allons parler de l'erreur "indexerror : list index out of range". Nous allons discuter de son fonctionnement et parcourir un exemple de scénarios où cette erreur est présente afin de pouvoir la résoudre.

1. La fonction Index ()

Index () est une fonction intégrée en Python qui recherche un élément donné depuis le début de la liste et renvoie l'index le plus bas où l'élément apparaît.

Exemple 

liste = ['a','b','c','d','e']
liste[2]

Résultat d’exécution 

1.1 Indexation « avant » de la liste

Python prend en charge deux types d'indexation, l'indexation avant et l'indexation arrière. L'index avant commence à 0 et se termine par le nombre d'éléments de la liste. L'index avant est utilisé pour itérer un élément dans le sens direct. L'élément de la liste est imprimé dans la même séquence d'index. D’où, la valeur d'index est augmentée jusqu'à la valeur d'index suivante.

Index

1

2

3

4

Valeur

a

b

c

d

e

1.2 Indexation « arrière » de la liste

Python prend en charge l'indexation arrière. L'index arrière commence à -1 et se termine par la valeur négative du nombre d'éléments de la liste. L'index arrière est utilisé pour itérer les éléments dans le sens inverse. Ainsi, l’élément de la liste est imprimé dans l'ordre inverse de l'index. D’où la valeur d'index est décrémentée pour obtenir la valeur suivante. L'index arrière est comme indiqué ci-dessous :

Index

-5

-4

-3

-2

-1

Valeur

a

b

c

d

e

2. Que signifie l'erreur index out of range ?

« Index out of range » signifie que vous fournissez un index pour lequel un élément de liste n'existe pas. Cette erreur signifie que le code tente d'accéder à une valeur ou à un vecteur en dehors de ses limites. En python, la liste est modifiable, donc la taille n'est pas fixe.

Si vous essayez d'attribuer une valeur à un index de liste ou à une position qui n'existe pas, vous obtiendrez l’erreur suivante : IndexError: list index out of range.

Les éléments d'une liste python ont des index numériques avec le premier élément ayant l'index 0, le second élément avec l'index 1. Le dernier élément de la liste a un index inférieur ou égal à la longueur de la liste. Ainsi, si une liste comporte 5 éléments, alors l'index du dernier élément aura un index 4.

Les valeurs peuvent être affectées à une liste en utilisant cet index ou cette position en utilisant la syntaxe suivante : liste_nom [index] = valeur.

Si vous essayez d'attribuer une valeur à un index supérieur à l'index maximum ou l'index du dernier élément de la liste, ou longueur de la liste – 1 alors cette erreur sera soulevée.

3. Le problème: indexerror: index out of range

Comme toujours, la meilleure façon de résoudre une erreur  est de lire et décomposer le message généré :

indexerror: list index out of range

Ce message d'erreur nous indique que nous essayons d'accéder à une valeur à l'intérieur d'un tableau qui n'a pas de position d'index. En Python, les numéros d'index commencent à 0.

Considérons alors une liste Python typique :

Liste = ["Java", "Python", "PHP"]

Cette liste contient trois valeurs. Le premier élément de la liste, Java, possède la valeur d'index 0. Chaque valeur qui suit a un numéro d'index 1 supérieur au dernier. Par exemple, la valeur d'index de Python est 1.

Si nous essayons d'accéder à un élément à la position d'index 3, une erreur sera renvoyée. Le dernier élément de notre tableau possède la valeur d'index 2.

4. Exemples, scénarios et solutions

Il existe deux scénarios courants dans lesquels l'erreur « list index out of range » est générée :

  • ·Lorsque vous essayez de parcourir une liste sans considérer le début d’indexation commençant avec 0.
  • ·Lorsque vous oubliez d'utiliser range () pour parcourir une liste.

Passons en revue ces deux scénarios !

4.1.1 Scénario 1 : Listes indexées à partir de 0

Considérons le programme suivant qui permet d’imprimer toutes les valeurs dans une liste appelée « langages_programmation » dans le shell Python :

Syntaxe :

langages_programmation = ["Java", "Python", "PHP"]
count = 0
while count print(langages_programmation[count])
count += 1

Tout d'abord, nous avons déclaré deux variables. La variable «langages_programmation» permet de stocker la liste des langues que nous voulons imprimer sur la console. Deuxièmement, la variable «count» est utilisée pour suivre le nombre de valeurs que nous avons imprimées sur la console.

Nous avons déclaré une boucle while. Cette boucle imprime la valeur de la variable « langages_programmation » à la position d'index stockée dans « count ». Ensuite, il incrémente de 1 la variable « count ». Cette boucle se poursuit jusqu'à ce que la valeur de « count » ne soit plus inférieure ou égale à la longueur de la liste « langages_programmation».

Essayons de voir la sortie de notre code :

Résultat d’exécution :

Toutes les valeurs de notre liste sont imprimées sur la console mais une erreur est générée. Le problème est que notre boucle continue à s’exécuter jusqu'à ce que la valeur de « count » ne soit plus inférieure ou égale à la longueur de la variable « langages_programmation ». Cela signifie que sa dernière itération vérifiera :

langages_programmation[3]

Cette valeur n'existe pas, donc la syntaxe provoque une IndexError. Pour résoudre ce problème, nous pouvons changer notre opérateur de  à . Cela garantira que notre liste ne sera itérée que lorsque la valeur de « count » ne soit plus inférieure à la longueur de « langages_programmation ». Faisons alors ce changement :

Syntaxe :

langages_programmation = ["Java", "Python", "PHP"]
count = 0
while count print(langages_programmation[count])
count += 1

Résultat d’exécution :

Nous avons résolu l'erreur avec succès ! Notre boucle n'essaye plus d'imprimer des valeurs relatives à l’instruction langages_programmation [3]. Il s'arrête lorsque la valeur de « count » est égale à 3 car le nombre 3 n'est pas inférieur à la longueur de «langages_programmation».

4.1.2 Scénario 2 : Oubli de la fonction range()

La fonction range () est utilisée pour générer une séquence de nombres dans le temps. Dans sa forme la plus simple, elle accepte un entier et renvoie un objet range (un type d'itérable). En Python 2, la fonction range () renvoie une liste qui n'est pas très efficace pour gérer des données volumineuses. La syntaxe de la fonction range () est la suivante :

Syntaxe:

range ([start,] stop) -> objet range

Description des paramètres:

  • ·Start (facultatif) : Point de départ de la séquence. Il vaut 0 par défaut.
  • ·Stop (obligatoire) Point final de la séquence. Cet élément ne sera pas inclus dans la séquence.

Exemple et solution

Lorsque vous parcourez une liste de nombres, il est facile d’oublier l’inclusion de l’instruction range(). Si vous accédez aux éléments de cette liste, une erreur peut se produire. Considérons le code suivant:

Syntaxe:

âges = [11, 12, 22,14]
for âge in âges:
print (âges [âge])

Ce code doit imprimer toutes les valeurs de la liste « âges ». Cette liste contient les âges de personnes aléatoires dans un quartier. Exécutons notre code et voyons le résultat.

Résultat d’exécution :

Une erreur s'affiche. Ajoutons une instruction print() dans notre boucle pour voir la valeur de l'âge à chaque itération et identifier la source du problème.

Syntaxe:

âges = [11, 12, 22,14]
for âge in âges:
print(âge)
print (âges [âge])

Résultat d’exécution

Le premier âge, 11 ans, est imprimé sur la console. Cependant, la valeur de « âge » est une valeur réelle de « âges ». Ce n’est pas un numéro d’index mais sur la ligne de code "print (âges [âge])", nous essayons d'accéder à un âge par le biais de son numéro d'index.

Lorsque nous exécutons notre code, il vérifie : âges [11]. La valeur de « âge » est 11 dans la première itération. Or, il n'y a aucun élément dans notre liste « âges » avec cette valeur.

Pour résoudre ce problème, nous pouvons utiliser une instruction range () pour parcourir notre liste d’âges :

Syntaxe :

âges = [11, 12, 22,14]
for âge in range(0, len(âges)):
print(âges[âge])

Résultat d’exécution :

Toutes les valeurs de la liste « âges » sont imprimées sur la console. L'instruction range () crée une liste de nombres dans une plage particulière. Dans ce cas, la plage [0, 1, 2] est créée. Ces nombres peuvent ensuite être utilisés pour accéder aux valeurs « âges » par leur numéro d'index.

Conclusion

Les erreurs d'index se produisent tout le temps. Pour résoudre l'erreur "indexerror : list index out of range", vous devez vous assurer que vous n'essayez pas d'accéder à un élément inexistant dans une liste.

Si vous utilisez une boucle for pour accéder à un élément, assurez-vous que cette boucle tient compte du fait que les listes sont indexées à partir de zéro. Si cela ne résout pas le problème, vérifiez que vous utilisez range () pour accéder à chaque élément par sa valeur d'index.

Vous êtes maintenant prêt à résoudre l'erreur "indexerror : list index out of range" comme un expert Python !

Article publié le 17 Décembre 2020par Mouhtat Bilal