La gestion des erreurs et des exceptions Python est quelque chose que vous devrez prendre en considération dans tous vos programmes. Il est évident pour un développeur de rencontrer quelques erreurs lorsqu’il écrit du code. Cependant, il existe principalement deux types d’erreurs, intégrées et celles qui sont causées par l’utilisateur.
En Python, les exceptions sont déclenchées automatiquement suite à des erreurs, et elles peuvent être déclenchées et interceptées par votre code.

En fait, la gestion des exceptions et des erreurs Python, aide les développeurs à gérer ces situations exceptionnelles en maîtrisant le comportement de votre code même en cas d’erreurs.
Des exceptions se produisent lorsque des situations exceptionnelles surviennent dans votre programme. Par exemple, ouvrir un fichier qui n’existe pas, ou arrêter un programme en cours d’exécution et parfois même, un utilisateur voudra s’amuser en saisissant n’importe quoi. De telles situations sont gérées à l’aide des exceptions.
La gestion des erreurs et des exceptions Python-les cas courants
Voici une liste des exceptions courantes que vous rencontrerez en Python.
ZeroDivisionError
: lorsque vous essayez de diviser un nombre par zéro.ImportError
: importer une bibliothèque qui n’est pas installée ou le nom que vous avez fourni est incorrect.IndexError
: l’index n’a pas été trouvé dans la séquence. IndentationError
: l’indentation est incorrecte.SyntaxError
: une erreur de syntaxe.ValueError
: les valeurs spécifiées sont incorrectes.
KeyError – lorsqu’une clé (dictionnaire) n’est pas trouvée.KeyboardInterrupt
: l’utilisateur appuie sur la touche d’interruption (normalement Control-C ou Delete).NameError
: lorsqu’un nom local ou global est introuvable.Exception
: C’est la classe de base de toutes les exceptions. Si vous ne savez pas quelle exception peut se produire, vous pouvez utiliser cette classe.
Prenons l’exemple de la division d’un nombre par zéro :
>>> b = 0
>>> a / b
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
a / b
ZeroDivisionError: division by zero
Python renvoie un message d’exception détaillé qui donne la raison de l’exception pour nous faciliter la correction de notre code.
Traceback
: remonter à l’origine de l’exception.File "<pyshell#4>", line 1
: le nom du fichier et le numéro de ligne de l’exception.a / b
: le code qui a généré l’erreur.ZeroDivisionError
: le nom de l’exception.
L’instruction try – except
L’instruction la plus basic dans la gestion des exceptions et des erreurs Python utilise les mots-clés try
et except
pour gérer les exceptions. Les deux mots-clés sont suivis de blocs de codes indentés.
# nous disons à Python d'essayer d'exécuter un code
# mais, en cas d'exception, il devra exécuter un autre code
try :
# Essayez ce bloc de code
except :
# à exécuter en cas d'erreur dans le bloc try
En effet, la gestion des erreurs et des exceptions Python est très simple.
Reprenons l’exemple précédent de la division par zéro.
>>> try :
a / b
except ZeroDivisionError:
print("La division par zéro est impossible!")
Le résultat du code :
La division par zéro est impossible!
Voici une autre méthode que vous pouvez utiliser pour gérer l’erreur :
>>> try :
a / b
except :
print("La division par zéro est impossible!")
La sortie :
La division par zéro est impossible!
Cette méthode n’est pas recommandé, parce que vous ne savez pas quelle exception vous allez déclencher. Donc, vous ne pouvez pas déterminer le message à retourner avec précision.
Un seul bloc try
peut avoir plusieurs blocs except
.
>>> try:
a/b
except TypeError:
print('Erreur de type de données')
except ZeroDivisionError:
print ('Division impossible')
Ce qui donne comme sortie :
Division impossible
Voici une autre façon de détecter plusieurs exceptions.
L’instruction finally
La plupart du temps, lorsqu’une exception se produit, vous devrez alerter l’utilisateur en lui affichant un message. Cependant, vous devrez peut-être quitter votre programme.
Parfois, il est nécessaire de nettoyer avant de sortir du programme. Par exemple, si vous avez ouvert une connexion avec une base de données ou un fichier, vous voudrez les fermer avant de quitter votre programme. Ceci est facile avec la déclaration finally
.
>>> dic = {"a":1, "b":2, "c":3}
>>> try:
val = dic["d"]
except KeyError:
print("Cette clé est inexistante!")
finally:
print("Cette instruction sera exécutée à la fin!")
Cette clé est inexistante!
Cette instruction sera exécutée à la fin!
Génial, on a affiché notre message qui gère l’erreur, puis on a pu exécuté une autre instruction quelque soit le comportement de notre programme.
Vous pouvez maintenant utiliser l’instruction finally
pour nettoyer votre code quelque soit l’erreur. Par conséquent, vous mettriez une instruction d’exit pour sortir du programme à l’intérieur du bloc finally
.
La gestion des erreurs et des exceptions Python avec else
L’instruction try/except
dispose d’une autre option, c’est l’utilisation du else
. L’instruction else
ne fonctionnera que si aucune erreur n’est générée.
>>> try:
val = dic["a"]
except KeyError:
print("Cette clé est inexistante!")
else:
print("Tout va bien!")
Le résultat :
Tout va bien!
Comme il n’y a pas d’erreur, l’instruction else s’exécute. Ajoutons maintenant la déclaration finally
.
>> try:
val = dic["a"]
except KeyError:
print("Cette clé est inexistante!")
else:
print("Tout va bien!")
finally:
print("Ce programme teste les exceptions!")
Tout va bien!
Ce programme teste les exceptions!
Dans cet exemple, les instructions else
et finally
ont été exécutées. La plupart du temps, vous ne verrez pas l’instruction else
utilisée car tout code qui suit un try/else sera exécuté si aucune erreur n’a été soulevé. La seule bonne utilisation de l’instruction else
que j’ai vue est celle où vous souhaitez exécuter un deuxième bloc de code qui peut également générer une erreur.
Soulever une exception
On a également l’instruction raise
à utiliser dans le contexte de la gestion des erreurs et des exceptions Python. Cela entraîne la génération explicite d’une exception. Les erreurs intégrées sont déclenchées implicitement.
>>> try:
num = int(input('Saisissez un nombre inférieur à 10 : '))
if num > 10:
raise ValueError(num)
except ValueError:
print(num, "est supérieur à 10.")
else:
print(num, "est un nombre valide.")
Saisissez un nombre inférieur à 10 : 20
20 est supérieur à 10.
Comme vous pouvez le constater, l’exception levée est de type ValueError
. Cependant, vous pouvez définir votre type d’exception personnalisé à déclencher.