Création de gestionnaires de contexte personnalisés
Glissez pour afficher le menu
Pour exploiter pleinement la puissance des gestionnaires de contexte en Python, il est possible d’en créer un personnalisé en définissant une classe qui implémente les méthodes __enter__ et __exit__. La méthode __enter__ est appelée lorsque l’exécution entre dans le contexte de l’instruction with, et sa valeur de retour est assignée à la variable après as. La méthode __exit__ est invoquée lorsque l’exécution quitte le contexte, que ce soit normalement ou à la suite d’une exception. Cette conception permet de configurer et de libérer des ressources de manière sûre et prévisible, ce qui est particulièrement utile pour la gestion de fichiers, de connexions réseau ou de verrous.
La méthode __exit__ reçoit trois arguments : exc_type, exc_value et traceback. Ceux-ci fournissent des informations sur toute exception survenue dans le bloc de contexte. Si __exit__ retourne True, l’exception est supprimée ; sinon, l’exception sera propagée après le nettoyage. En implémentant ces méthodes, il est possible de contrôler précisément la logique d’initialisation et de nettoyage des ressources, rendant le code plus robuste et maintenable.
class FileLogger:
def __init__(self, filename, logname):
self.filename = filename
self.logname = logname
self.file = None
self.log = None
def __enter__(self):
self.file = open(self.filename, "r")
self.log = open(self.logname, "a")
self.log.write(f"Opened file: {self.filename}\n")
return self.file
def __exit__(self, exc_type, exc_value, traceback):
if self.file:
self.file.close()
self.log.write(f"Closed file: {self.filename}\n")
if self.log:
self.log.close()
# Do not suppress exceptions
return False
Le code suivant illustre une classe de gestionnaire de contexte personnalisée FileLogger. Cette classe est conçue pour ouvrir un fichier cible en lecture et un fichier de log en mode ajout. Lors de l’entrée dans le contexte (avec l’instruction with), elle consigne l’événement d’ouverture du fichier. Lors de la sortie du contexte – que ce soit à la suite d’une exécution normale ou d’une exception – elle consigne l’événement de fermeture du fichier et s’assure que les deux fichiers sont correctement fermés. La méthode __exit__ ne supprime pas les exceptions, permettant ainsi leur propagation après le nettoyage.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion