Skip to content

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”

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.

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.

  1. Levée : une erreur se produit (ex. division par zéro).
  2. Propagation : Python remonte la pile d’appels pour trouver un gestionnaire.
  3. Capture : un bloc try...except gère l’erreur.
  4. Arrêt : si aucune capture, le programme s’arrête.

ExceptionCauseExemple du monde réel
ZeroDivisionErrorDivision par zéroCalcul d’un taux avec dénominateur nul
TypeErrorMauvais type d’objetAddition d’un nombre et d’une chaîne
ValueErrorValeur incorrecteConversion d’une saisie utilisateur invalide
IndexErrorIndice hors de portéeAccès à un élément inexistant d’une liste
KeyErrorClé inexistanteRecherche d’une clé absente dans un dictionnaire
FileNotFoundErrorFichier introuvableLecture d’un fichier de configuration manquant
ImportErrorÉchec d’importationModule non installé ou mal nommé

print(10 / 0)

Sortie :

ZeroDivisionError: division by zero

👉 Dans une application bancaire, cela peut arriver si on calcule un taux avec un solde nul.


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.


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.


Exécuté si aucune exception n’est levée.
Utile pour séparer le traitement normal du traitement des erreurs.

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.

Créer des classes spécifiques pour gérer des erreurs métier (ex. PaiementRefuseError dans une application e-commerce).

Vérifier des conditions pendant le développement.
Exemple : s’assurer qu’un paramètre est positif avant de lancer un calcul.


  • Capturer des exceptions spécifiques.
  • Fournir des messages clairs et utiles.
  • Ne pas masquer toutes les erreurs (except Exception:).
  • Utiliser finally pour libérer les ressources.
  • Lever des exceptions (raise) pour signaler des erreurs métier.
  • Documenter les exceptions possibles dans les fonctions.

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 ! 🚀



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 (TypeError ou ValueError)

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.0
print(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")) # 123
print(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 / 0
except ZeroDivisionError:
print("Erreur : division par zéro.")
finally:
print("Libération de la ressource.")

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.



À propos de l'auteur

Riyad ODJOUADEExpert en cybersécurité & infrastructure

Je partage des guides techniques pratiques sur la cybersécurité, l'administration système et le développement web. Tous les contenus sont basés sur des expérimentations réelles.