Les exceptions et leurs gestion
Introduction
Quelles sont les erreurs possibles dans le code suivant ?
nombre = int(input("Entrez un nombre:"))
resultat = 10 / nombreSi 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 exceptions
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 ValueErroret 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 :
Gestion des exceptions
Syntaxe try/except
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).
Exemple :
Gestion des exceptions du code suivant :
Gestion de l'exception
ZeroDivisionError: Le code suivant permet de détecter et gérer une exception de typeZeroDivisionErrordans l’instructionresultat = 10 / nombre.
Gestion de l'exception
ValueError: Le code suivant permet de détecter et gérer une exception de typeValueErrordans l’instructionnombre = 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.
Syntaxe try/except/else/finally
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).
Exemple :
Pratiques non conseillées
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.
Last updated