Leçon 7 / 10 — Chapitre 5: Itérateurs, générateurs et context managers
Comment fonctionne réellement with
Python Intermédiaire a montré with open(...) as fichier: sans expliquer son mécanisme interne. Un objet utilisable avec with est un context manager : il implémente deux méthodes spéciales, __enter__ et __exit__.
class Ressource:
def __enter__(self):
print("Ouverture")
return self
def __exit__(self, type_erreur, valeur_erreur, traceback):
print("Fermeture")
with Ressource() as r:
print("Utilisation")
Ce code affiche Ouverture, Utilisation, puis Fermeture — dans cet ordre précis. __enter__ s'exécute à l'entrée du bloc with, et sa valeur de retour (self, ici) est affectée à r via as r. __exit__ s'exécute automatiquement à la sortie du bloc, que ce soit normalement ou à cause d'une erreur.
C'est exactement ce mécanisme qui garantit qu'un fichier ouvert avec with open(...) (vu dans Python Intermédiaire) se referme toujours, même si une erreur survient au milieu du bloc : __exit__ s'exécute dans les deux cas.
with Ressource() as r:
print("Avant erreur")
raise ValueError("Oups")
Ce code affiche Ouverture, Avant erreur, puis Fermeture avant que l'erreur ValueError ne remonte et n'arrête le programme — __exit__ s'exécute systématiquement, même en cas d'erreur dans le bloc.
À vous de jouer : créez une classe avec __enter__ et __exit__ qui affichent chacun un message, et utilisez-la dans un bloc with.
Continuez ce module
Débloquez les leçons restantes ainsi que l'attestation finale.
9 000 XOF / 13,72 € / 14,95 $
Débloquez les 94 leçons restantes de ce module
Pour vous communiquer où envoyer le paiement.
Moyen de paiement souhaité
Nous vous contactons pour le paiement — activé dès réception.