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.

Gestion des erreurs et des exceptions

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.


1 commentaire

Samuel · 25 septembre 2023 à 14 h 23 min

Très bien pour revoir des notions oubliées

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *