Par Maxime Jumelle
CTO & Co-Founder
Publié le 6 nov. 2020
Catégorie Machine Learning
Qui n'a jamais eu d'erreur en exécutant un code Python ? Une division par 0, une variable mal orthographiée ou une liste pas assez longue, on a tous déjà du comprendre pourquoi nous avons une erreur. Mais il convient de bien différencier deux types d'erreurs qui peuvent survenir en Python.
La principale différence, c'est que les erreurs de syntaxe sont détectées avant l'exécution du programme, alors que les exceptions surviennent pendant l'exécution du programme.
Heureusement pour nous, avec Python, il est possible de gérer les exceptions, c'est-à-dire pouvoir les détecter et les isoler pour ne pas stopper l'exécution du programme.
❓ Pourquoi a-t-on besoin de gérer les exceptions ?
Imaginons que le programme soit exécuté sur un serveur. Si nous avons, à un moment, une erreur que nous n'avons pas géré, cela peut faire crasher le programme !
Il vaut donc mieux éviter que cela se produise.
Commençons par voir comment gérer très facilement une erreur. Prenons le code suivant qui va générer une erreur puisque l'on va additionner un nombre (type int
) avec une chaîne de caractères (type str
).
num = 10 num += "3"
L'erreur est de type TypeError
: cela signifie qu'il y a une incompatibilité entre les types. Avec le mot-clé try
, nous allons essayer d'éviter l'arrêt du programme en cas d'erreur.
À lire aussi : découvrez notre formation MLOps
num = 10 # Le mot-clé try délimite le moment à partir duquel une erreur qui intervient sera gérée try: num += "3" except: print("Une erreur est survenue.")
Ici, le mot-clé except
va simplement exécuter des instructions en cas d'erreur. En particulier, un message sera affiché pour avertir l'utilisateur qu'une erreur est survenue.
Maintenant, si l'on souhaite avoir plus d'informations sur la nature de l'erreur, notamment à l'aide d'une description plus explicite. Dans ce cas, il est possible de récupérer les informations l'erreur dans une variable.
num = 10 try: num += "3" except Exception as e: print("L'erreur suivante est survenue :", e)
En plus de gérer l'erreur survenue, nous pouvons en afficher les détails.
Naturellement, dans un code Python, il n'y a pas qu'une seule source d'erreur qui peut survenie : plusieurs types d'erreurs sont possibles dans un même bloc d'instruction. Là encore, il est possible de gérer plusieurs cas en fonction de la nature de l'erreur.
Nous allons effectuer trois erreurs de nature différente :
TypeError
, similaire à celle réalisée plus haut.NameError
, où une variable sera mal orthographiée.Exception
.Exécutons le code suivant.
num = 10 try: num += "3" print("Pas d'erreur.") except TypeError as e: print("Erreur : incompatibilité de types.") finally: print("Ce print sera quand même exécuté.")
Avec le mot clé except
suivi d'un type d'erreur particulier, nous sommes capable de gérer un type particulier d'erreur. En conséquence, nous pourrions effectuer un traitement spécifique lorsqu'une erreur particulière apparaît.
⚠️ Il est déconseillé, en pratique, d'utiliser le mot-clé except
tout seul, sans le type d'erreur. Selon la norme PEP8, il faut au maximum toujours spécifier un type d'erreur.
Enfin, le mot-clé finally
sera exécuté quel que soit l'issue du bloc try .. except
. Qu'il y ait une erreur ou pas, cela permet de définir des instructions à ne pas manquer même si une erreur s'est produite.
Prenons maintenant le code suivant où la variable num
est mal orthographiée.
num = 10 try: nuum += "3" print("Pas d'erreur.") except TypeError as e: print("Erreur : incompatibilité de types.") except NameError as e: print("Erreur de nommage :", e) finally: print("Ce print sera quand même exécuté.")
Maintenant, en fonction de la nature de l'erreur, nous pouvons rediriger l'exécution vers un bloc spécifique. Ici, il s'agit d'un NameError
et l'affichage sera donc différent du cas où l'erreur était de type TypeError
.
Enfin, pour une erreur générique, nous pouvons toujours utiliser le type Exception
: il s'agit de l'équivalent du else
pour les exceptions.
num = 10 try: num /= 0 print("Erreur : incompatibilité de types.") except TypeError as e: print("Incompatibilité de types") except NameError as e: print("Erreur de nommage :", e) except Exception as e: print("Erreur inconnue :", e) finally: print("Ce print sera quand même exécuté.")
Remarquons, pour terminer, que même s'il n'y a pas eu d'erreur, le bloc finally
sera quand même exécuté.
num = 10 try: num += 3 print("Pas d'erreur.") except TypeError as e: print("Incompatibilité de types") except NameError as e: print("Erreur de nommage :", e) except Exception as e: print("Erreur inconnue :", e) finally: print("Ce print sera quand même exécuté.")
Une dernière chose qui peut être intéressante lorsqu'une erreur survient, c'est de remonter la pile d'appel pour savoir précisement où et comment l'erreur est survenue. Pour utiliser la pile d'appel (ou d'exécution), on utilise le traceback
sous Python.
À lire aussi : découvrez notre formation MLOps
import traceback num = 10 try: num /= 0 except Exception: print("Une erreur est survenue :") traceback.print_exc() # Affiche la pile d'appel de l'exception
if ... else
Vous souhaitez vous former au MLOps ?
Articles similaires
20 sept. 2022
Hugging Face est une startup française qui s'est fait connaître grâce à l'infrastructure NLP qu'ils ont développée. Aujourd'hui, elle est sur le point de révolutionner le domaine du Machine Learning et traitement automatique du langage naturel. Dans cet article, nous allons présenter Hugging Face et détailler les taches de base que cette librairie permet de réaliser. Nous allons également énumérer ses avantages et ses alternatifs.
Équipe Blent
Data Scientist
Lire l'article
12 juil. 2022
spaCy est une bibliothèque open-source pour le traitement avancé du langage naturel. Elle est conçue spécifiquement pour une utilisation en production et permet de construire des applications qui traitent et comprennent de grands volumes de texte.
Équipe Blent
Data Scientist
Lire l'article
4 juil. 2022
Un auto-encodeur est une structure de réseaux neuronaux profonds qui s'entraîne pour réduire la quantité de données nécessaires pour représenter une donnée d'entrée. Ils sont couramment utilisés en apprentissage automatique pour effectuer des tâches de compression de données, d'apprentissage de représentations et de détection de motifs.
Équipe Blent
Data Scientist
Lire l'article
60 rue François 1er
75008 Paris
Blent est une plateforme 100% en ligne pour se former aux métiers Tech & Data.
Organisme de formation n°11755985075.
Data Engineering
IA Générative
MLOps
Cloud & DevOps
À propos
Gestion des cookies
© 2025 Blent.ai | Tous droits réservés