Maîtriser la gestion des exceptions en Python
🐍 Maîtriser la gestion des exceptions en Python
Section titled “🐍 Maîtriser la gestion des exceptions en Python”📖 Introduction
Section titled “📖 Introduction”La gestion des exceptions est un aspect essentiel en Python. Elle permet de gérer les erreurs de manière élégante et efficace, d’écrire des programmes robustes et d’offrir une meilleure expérience utilisateur.
Dans le monde réel, les exceptions sont utilisées pour :
- Empêcher un site web de planter si une base de données est inaccessible.
- Gérer les erreurs de saisie dans une application bancaire.
- Assurer qu’un fichier est toujours fermé après lecture/écriture.
- Protéger une API contre des entrées invalides.
🧠 Théorie générale
Section titled “🧠 Théorie générale”Qu’est-ce qu’une exception ?
Section titled “Qu’est-ce qu’une exception ?”Une exception est un événement inattendu qui interrompt le déroulement normal d’un programme.
En Python, les exceptions sont des objets dérivés de la classe BaseException.
Cycle de vie d’une exception
Section titled “Cycle de vie d’une exception”- Levée : une erreur se produit (ex. division par zéro).
- Propagation : Python remonte la pile d’appels pour trouver un gestionnaire.
- Capture : un bloc
try...exceptgère l’erreur. - Arrêt : si aucune capture, le programme s’arrête.
📚 Types d’exceptions courantes
Section titled “📚 Types d’exceptions courantes”| Exception | Cause | Exemple du monde réel |
|---|---|---|
| ZeroDivisionError | Division par zéro | Calcul d’un taux avec dénominateur nul |
| TypeError | Mauvais type d’objet | Addition d’un nombre et d’une chaîne |
| ValueError | Valeur incorrecte | Conversion d’une saisie utilisateur invalide |
| IndexError | Indice hors de portée | Accès à un élément inexistant d’une liste |
| KeyError | Clé inexistante | Recherche d’une clé absente dans un dictionnaire |
| FileNotFoundError | Fichier introuvable | Lecture d’un fichier de configuration manquant |
| ImportError | Échec d’importation | Module non installé ou mal nommé |
🛠️ Exemples pratiques avec sorties
Section titled “🛠️ Exemples pratiques avec sorties”ZeroDivisionError
Section titled “ZeroDivisionError”print(10 / 0)Sortie :
ZeroDivisionError: division by zero👉 Dans une application bancaire, cela peut arriver si on calcule un taux avec un solde nul.
TypeError
Section titled “TypeError”print('5' + 3)Sortie :
TypeError: can only concatenate str (not "int") to str👉 Dans une API, cela peut se produire si une donnée JSON est mal typée.
🎯 Utiliser try et except
Section titled “🎯 Utiliser try et except”try: num = int(input("Entrez un nombre : ")) resultat = 10 / num print(f"Résultat : {resultat}")except ZeroDivisionError: print("Erreur : division par zéro.")except ValueError: print("Erreur : veuillez entrer un nombre valide.")👉 Dans une interface utilisateur, cela évite que le programme plante si l’utilisateur saisit une valeur incorrecte.
🔄 Fonctionnalités avancées
Section titled “🔄 Fonctionnalités avancées”Exécuté si aucune exception n’est levée.
Utile pour séparer le traitement normal du traitement des erreurs.
finally
Section titled “finally”Toujours exécuté, même en cas d’erreur.
Indispensable pour libérer des ressources (fermer un fichier, une connexion réseau).
Permet de lever une exception manuellement pour signaler une condition anormale.
Exceptions personnalisées
Section titled “Exceptions personnalisées”Créer des classes spécifiques pour gérer des erreurs métier (ex. PaiementRefuseError dans une application e-commerce).
Assertions
Section titled “Assertions”Vérifier des conditions pendant le développement.
Exemple : s’assurer qu’un paramètre est positif avant de lancer un calcul.
⚖️ Bonnes pratiques
Section titled “⚖️ Bonnes pratiques”- Capturer des exceptions spécifiques.
- Fournir des messages clairs et utiles.
- Ne pas masquer toutes les erreurs (
except Exception:). - Utiliser
finallypour libérer les ressources. - Lever des exceptions (
raise) pour signaler des erreurs métier. - Documenter les exceptions possibles dans les fonctions.
📋 Évaluation des connaissances
Section titled “📋 Évaluation des connaissances”À quoi sert cette évaluation ?
Section titled “À quoi sert cette évaluation ?”Cette évaluation rapide (3 minutes) va vous permettre de vérifier votre compréhension du sujet traité dans ce guide.
Instructions :
- 🕒 Temps limité : 3 minutes
- 🎯 Seuil de réussite : 80%
- 💡 Les réponses seront expliquées à la fin
À vous de jouer ! 🚀
📝 Exercices pratiques
Section titled “📝 Exercices pratiques”Exercice 1 : Division sécurisée
Écrivez une fonction diviser(a, b) qui gère :
- Division par zéro (
ZeroDivisionError) - Entrée non numérique (
TypeErrorouValueError)
Solution :
def diviser(a, b): try: return a / b except ZeroDivisionError: return "Erreur : Division par zéro non permise." except (TypeError, ValueError): return "Erreur : Les deux valeurs doivent être des nombres."
print(diviser(10, 2)) # 5.0print(diviser(10, 0)) # Erreur : Division par zéro non permise.print(diviser("10", 2)) # Erreur : Les deux valeurs doivent être des nombres.Exercice 2 : Exception personnalisée
Créez une exception NoteError si une note est hors de l’intervalle 0–20.
Solution :
class NoteError(Exception): pass
def verifier_note(note): if note < 0 or note > 20: raise NoteError("La note doit être comprise entre 0 et 20.") return "Note valide"
try: print(verifier_note(25))except NoteError as e: print(f"Erreur : {e}")Exercice 3 : Gestion de fichier
Écrivez un programme qui ouvre un fichier et gère l’erreur si le fichier n’existe pas.
Solution :
try: with open("inexistant.txt", "r") as f: contenu = f.read()except FileNotFoundError: print("Erreur : fichier introuvable.")Exercice 4 : Conversion sécurisée
Écrivez une fonction convertir_en_entier(valeur) qui convertit une chaîne en entier et gère les erreurs.
Solution :
def convertir_en_entier(valeur): try: return int(valeur) except ValueError: return "Erreur : valeur non convertible en entier."
print(convertir_en_entier("123")) # 123print(convertir_en_entier("abc")) # Erreur : valeur non convertible en entier.Exercice 5 : Nettoyage avec finally
Simulez l’ouverture d’une ressource et assurez-vous qu’elle est toujours libérée avec finally.
Solution :
try: print("Ouverture de la ressource...") x = 10 / 0except ZeroDivisionError: print("Erreur : division par zéro.")finally: print("Libération de la ressource.")🏁 Conclusion
Section titled “🏁 Conclusion”La gestion des exceptions est essentielle pour écrire des programmes robustes en Python.
Dans le monde réel, elle permet d’éviter les plantages, de protéger les données sensibles et d’améliorer l’expérience utilisateur.
En maîtrisant try/except, else, finally, raise, les exceptions personnalisées et les bonnes pratiques, vous améliorez la fiabilité et la maintenabilité de vos programmes.