Dans cette partie, nous allons apprendre à intercepter les erreurs renvoyées par Python et à les gérer.
Les types d’erreurs et pourquoi gérer les erreurs
On programmation, on peut rencontrer principalement deux types d’erreurs :
- Les erreurs de syntaxe dans le code faites par le développeur ;
- Les erreurs d’environnement qui ne sont pas du fait du développeur.
Par exemple, se servir d’une variable non déclarée dans un script, utiliser des opérateurs avec des types de données qui ne les supportent pas ou oublier un guillemet ou un deux points sont des erreurs de syntaxe faites par le développeur.
En revanche, tenter d’importer un module qui ne serait pas disponible à un temps t, ou demander à un utilisateur d’envoyer un chiffre et recevoir une chaine par exemple va produire une erreur qui n’est pas sûr au développeur.
Comme les erreurs de syntaxe sont des erreurs que nous avons faites, nous pouvons les corriger directement et c’est ce qu’on s’efforcera à faire et modifiant nos scripts. Pour les autres erreurs, en revanche, il va falloir mettre en place un système de gestion d’erreurs qui indiquera au Python quoi faire si telle ou telle erreur est rencontrée.
Il est essentiel de fournir une gestion des erreurs d’environnement afin de garantir que le script ne plante pas dans certaines situations et pour garantir l’intégrité et la sécurité des données ainsi qu’une bonne expérience pour l’utilisateur qui n’a pas envie de voir des messages d’erreur Python.
En Python, nous allons pouvoir intercepter certaines erreurs pour les prendre en charge nous mêmes et pour décider si le script doit continuer de s’exécuter ou pas.
Les classes exception
En Python, les erreurs détectées durant l’exécution d’un script sont appelées des exceptions car elles correspondent à un état “exceptionnel” du script.
Si vous essayez de déclencher des erreurs manuellement, vous pouvez constater que Python analyse le type d’erreur et renvoie un message différent selon l’erreur détectée :
Ici, nous avons trois types d’exceptions différentes : une exception NameError
, une exception ZeroDivisionError
et une exception TypeError
. Comment fait Python pour analyser les types d’erreurs et renvoyer des messages différents en fonction ?
En fait, vous devez savoir que Python possède de nombreuses classes d’exceptions natives et que toute exception est une instance (un objet) créé à partir d’une classe exception.
Afin de bien comprendre la hiérarchie des classes d’exceptions, vous pouvez retenir que la classe d’exception de base pour les exceptions natives est BaseException
. Toutes les autres classes d’exception vont dériver de cette classe. Ensuite, nous avons également quatre autres classes d’exception de base (qui dérivent de BaseException
) :
- La classe
Exception
est la classe de base pour toutes les exceptions natives qui n’entraînent pas une sortie du système et pour toutes les exceptions définies par l’utilisateur (nous sommes l’utilisateur dans ce cas) ; - La classe
ArithmeticError
est la classe de base pour les exceptions natives qui sont levées pour diverses erreurs arithmétiques et notamment pour les classesOverflowError
,ZeroDivisionError
etFloatingPointError
; - La classe
BufferError
est la classe de base pour les exceptions levées lorsqu’une opération liée à un tampon (“buffer”) ne peut pas être exécutée ; - La classe
LookupError
est la classe de base pour les exceptions qui sont levées lorsqu’une clé ou un index utilisé sur un tableau de correspondances ou une séquence est invalide.
De nombreuses classes dérivent ensuite de ces classes de base. En fonction de l’erreur rencontrée par l’analyseur Python, un objet exception appartenant à telle ou telle classe exception va être crée et renvoyé. C’est cet objet là que nous allons pouvoir intercepter et manipuler.
Pour la liste complète des classes d’exception, vous pouvez consulter la documentation.