top of page

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:
 · BLOCK

1/ 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


 
 

© LH&TECH, tous droits réservés.

bottom of page