with : context manager
- 19 févr.
- 1 min de lecture
with open(”file.txt”) as f:
ou le context manager en détails 🙂
Introduit dans la PEP 343 (Python Enhancement Proposal), le gestionnaire de contexte promet un code concis, tout en assurant d’exécuter une phase initiale et une phase finale à chaque fois, y compris lors d’une sortie sur exception.
Par exemple, ouvrir/fermer un fichier, démarrer/arrêter une tâche…
Un exemple ?
f = open("file.txt")
failed_function()
f.write("some string")
f.close()Pas bien ! Pourquoi ? car il n’est pas garanti que le f.close() s’exécute.
with open("file.txt") as f:
· failed_function()
· f.write("some string")Bien ! Ici, la sortie de contexte garantit l’appel au f.close() (implicite) y compris si failed_function() lève une exception.
Voyons comment ça fonctionne. 🙂
with EXPR as OBJ:
· BLOCK1/ EXPR est évaluée pour obtenir le context manager. Préchargement des méthodes __enter__ et __exit__
2/ La méthode __enter__ est invoquée.
3/ Si `as` est utilisé alors l'objet retourné par __enter__ () est stocké dans OBJ
4/ Exécution de BLOCK
5/ La méthode __exit__du context manager est invoquée avec des paramètres permettant de savoir si la sortie est précipitée (levée d’une exception) ou normale.
Aussi simple que ca !
Vous l’aurez compris, le with simplifie la gestion de ressource en s'occupant automatiquement de l'ouverture et de la fermeture de celle-ci.
Pour créer vos propres contextes, définissez les méthodes __enter__ et __exit__ dans votre classe.
Pour plus d’infos




