Les exceptions et leurs gestion
Last updated
Last updated
Quelles sont les erreurs possibles dans le code suivant ?
Si on entre :
Une chaine de caractères (autre que des nombres), alors nous aurons l’erreur suivante :
Si nous entrons le chiffre 0, alors nous aurons l’erreur suivante :
Pour éviter ces erreurs d’exécution, nous pouvons, dans certains cas, valider la valeur entrée à l’aide d’un if
avant l’instruction dans laquelle il risque d’y avoir une erreur, ou d’utiliser la syntaxe try … except
.
Les erreurs détectées durant l'exécution sont appelées des exceptions. Dans les exemples d'erreurs précédents, les types d'exceptions sont ValueError
et ZeroDivisionError
(voir point rouge 4 dans les images précédentes).
Autres exemples :
TypeError
Signification du message d'erreur : On ne peut pas concaténer une chaîne de caractères (str) et un entier (int).
NameError
Signification du message d'erreur : la variable x n'est pas définie.
IndexError
Signification du message d'erreur : le numéro de l'indice déborde (l'élément à l'indice 6 n'existe pas dans la liste).
Pour tous les types d'exceptions, voir la documentation officielle de python suivante :
Documentation complète sur les exceptions :
Dans le bloc « try
», on met le code que l’on veut gérer, donc susceptible de lever une exception.
Dans le bloc « except
», on met le code à exécuter en cas d’exception. Il est possible de gérer plusieurs exceptions pour la(les) même(s) instruction(s).
Gestion des exceptions du code suivant :
Gestion de l'exception ZeroDivisionError
: Le code suivant permet de détecter et gérer une exception de type ZeroDivisionError
dans l’instruction resultat = 10 / nombre
.
Gestion de l'exception ValueError
: Le code suivant permet de détecter et gérer une exception de type ValueError
dans l’instruction nombre = int(input("Entrez un nombre:"))
.
Dans l'exemple précédent, si ça rentre dans le except ValueError
, la variable nombre
ne sera pas définie à la ligne 8 resultat = 10 / nombre
, il va y avoir un autre type d'exception.
Lorsqu'une ligne de code dépend directement de la précédente, une solution possible serait de gérer plusieurs exceptions dans le même bloc.
Dans le bloc « try
», on met le code que l’on veut gérer, donc susceptible de lever une exception.
Dans le bloc « except
», on met le code à exécuter en cas d’exception. Il est possible de gérer plusieurs exceptions pour la(les) même(s) instruction(s).
Dans le bloc « else
», on met le code à exécuter lorsqu’aucune exception ne survient.
Dans le bloc « finally
» est exécuté peu importe ce qui arrive (qu’il y ait une erreur ou non).
Gérer plusieurs types d'exceptions de la même façon :
Il n'est pas obligatoire de mentionner le type d'exception dansexcept
mais ceci est vivement déconseillé au risque de gérer à tort tous les types d'exceptions de la même façon.