ACTIVITÉ DE SYNTHÈSE – Gestion des exceptions en POO : Système de bibliothèque
Objectifs pédagogiques :
Comprendre comment intégrer la gestion des erreurs dans un système orienté objet.
Utiliser try, except, finally dans des classes.
Lever des exceptions personnalisées selon des règles métier (ex : emprunt dépassé, livre
non disponible).
Construire un système robuste et fiable grâce à des messages d’erreur précis.
TRAVAUX PRATIQUES – Système de gestion de bibliothèque
Contexte :
Vous êtes chargé(e) de créer un mini-système de gestion d’une bibliothèque. Chaque
livre peut être emprunté ou rendu par un usager. Vous devez gérer les cas suivants :
- Un utilisateur tente d'emprunter un livre déjà emprunté.
- Un utilisateur tente de rendre un livre qu’il n’a jamais emprunté.
Tous les essais doivent être loggés dans le bloc finally.
Consignes :
- Créez une classe LivreIndisponibleException(Exception) avec un message personnalisé :
Le livre demandé est déjà emprunté.
- Créez une classe LivreNonEmprunteException(Exception) avec un message :
Impossible de rendre un livre non emprunté.
- Créez une classe Livre avec :
Attributs : titre (str), emprunte (bool, par défaut à False)
- Méthode emprunter() :
Lève LivreIndisponibleException si emprunte == True
- Méthode rendre() :
Lève LivreNonEmprunteException si emprunte == False
- Testez différents cas dans un bloc try-except-finally :
* Emprunter un livre disponible.
* Emprunter un livre déjà emprunté.
* Rendre un livre emprunté.
* Rendre un livre déjà rendu.
QCM – Évaluation des acquis (20 questions)
Compréhension générale
1. Pourquoi utilise-t-on la gestion des exceptions en Python ?
a) Pour ignorer les erreurs
b) Pour améliorer la vitesse du programme
c) Pour gérer les erreurs sans arrêter le programme
d) Pour éviter d’écrire des conditions
2. Quelle est la bonne syntaxe pour gérer une erreur ?
a) try...then...end
b) try...except
c) try...catch
d) try...if...else
3. Que fait ce code ?
try:
x=1/0
except ZeroDivisionError:
print("Division par zéro interdite")
a) Il affiche une erreur
b) Il ne fait rien
c) Il affiche "Division par zéro interdite"
d) Il affiche 0
Blocs try, except, finally
4. Le bloc finally :
a) S’exécute seulement s’il y a une erreur
b) S’exécute uniquement si aucune erreur n’a lieu
c) S’exécute toujours, qu’il y ait erreur ou non
d) Ne s’utilise que dans les classes
5. Pourquoi créer une exception personnalisée dans une application ?
a) Pour éviter d’utiliser try-except
b) Pour rendre le code plus lent
c) Pour représenter des erreurs spécifiques à l’application
d) Pour éviter d’écrire des messages d’erreur
6. Que fait cette ligne ?
raise LivreIndisponibleException()
a) Elle crée une nouvelle classe
b) Elle lève une exception personnalisée
c) Elle capture une exception
d) Elle exécute la méthode __str__()
7. Quel mot-clé permet de définir une exception personnalisée ?
a) def
b) exception
c) raise
d) class
Cas pratiques du TP bibliothèque
8. Dans le TP bibliothèque, que doit faire la méthode emprunter() si le livre est
déjà emprunté ?
a) Laisser faire sans rien dire
b) Lancer une exception personnalisée
c) Supprimer le livre
d) Créer un nouveau livre
9. Que fait ce code ?
class MonException(Exception):
pass
a) Il capture une exception système
b) Il définit une exception personnalisée
c) Il affiche une erreur
d) Il exécute automatiquement le bloc finally
10. Lequel de ces cas n’est pas géré par une exception dans le TP bibliothèque ?
a) Livre inexistant
b) Livre déjà emprunté
c) Mauvais identifiant utilisateur
d) Tri des livres
Comportement des exceptions
11. Que se passe-t-il si une exception n’est pas interceptée dans un programme ?
a) Elle est automatiquement ignorée
b) Elle est transformée en avertissement
c) Elle interrompt le programme
d) Elle est enregistrée dans un fichier
12. Le mot-clé raise sert à :
a) Capturer une exception
b) Définir une nouvelle classe
c) Lancer une exception
d) Lire un fichier
13. Dans quel cas utilise-t-on finally ?
a) Pour forcer l'arrêt d’un programme
b) Pour exécuter un code même en cas d’erreur
c) Pour déclarer une fonction
d) Pour initialiser des variables globales
14. Que se passe-t-il si aucun except ne correspond à l’exception levée ?
a) Le programme continue sans problème
b) Python affiche une erreur et interrompt le programme
c) Python redémarre automatiquement
d) L’exception est ignorée
Syntaxe et structures
15. Quelle est la structure générale pour gérer des exceptions ?
a) try...except...catch
b) if...else...error
c) try...except...finally
d) check...raise
16. Peut-on avoir plusieurs blocs except après un bloc try ?
a) Non, un seul est autorisé
b) Oui, pour gérer différents types d’exceptions
c) Oui, mais uniquement dans les classes
d) Non, cela provoque une erreur de syntaxe
17. Peut-on lever une exception sans la traiter ?
a) Non, cela provoque une erreur
b) Oui, mais uniquement dans une fonction
c) Oui, l’exception peut être propagée
d) Non, Python empêche cela
18. Que permet l’utilisation d’une classe d’exception personnalisée ?
a) De rendre le programme plus rapide
b) D’ajouter de nouvelles fonctionnalités à Python
c) De définir des erreurs métiers spécifiques
d) D’éviter le bloc try
19. Quelle exception est levée si on accède à un index inexistant d’une liste ?
a) KeyError
b) TypeError
c) IndexError
d) ValueError
20. Est-il obligatoire d’utiliser le bloc finally ?
a) Oui, toujours
b) Non, il est optionnel
c) Seulement en cas d’erreur
d) Oui, si on utilise raise