Python With – En Python, l’instruction with est utilisée dans la gestion des exceptions pour rendre le code plus propre et beaucoup plus lisible.
Nous allons profiter de cet article pour mieux comprendre son utilisation.
Tu peux retrouver tous nos tutoriels sur cette page : cliquez ici
Tutoriel Python With
L’instruction with simplifie la gestion des ressources communes telles que les flux de fichiers.
Regardons l’exemple suivant sur la façon dont l’utilisation de l’instruction with rend le code plus propre.
# écriture dans un fichier
# 1) sans l'utilisation de l'instruction with
file = open('file_path', 'w')
file.write('hello world !')
file.close()
# 2) sans l'utilisation de l'instruction with
file = open('file_path', 'w')
try:
file.write('hello world')
finally:
file.close()
# avec l'utilisation de l'instruction with
with open('file_path', 'w') as file:
file.write('hello world !')
Veuillez noter que contrairement aux deux premières approches, il n’est pas nécessaire d’appeler file.close()
lors de l’utilisation de l’instruction with
. L’instruction with
gère elle-même l’acquisition et la libération appropriées des ressources. Cela a pour effet de rendre le code plus lisible et de réduire de moitié le nombre de lignes.
Dans la première approche, une exception survenue lors de l’appel de file.write()
peut empêcher la fermeture correcte du fichier, ce qui peut introduire plusieurs bugs dans le code. En d’autres termes, de nombreuses modifications dans les fichiers ne prendront effet que lorsque le fichier sera correctement fermé.
La deuxième approche de l’exemple ci-dessus gère toutes les exceptions, mais l’utilisation de l’instruction with
rend le code plus concis et bien plus lisible. Par conséquent, l’utilisation de l’instruction with
permet de prévenir les erreurs et les fuites en garantissant qu’une ressource est correctement libérée lorsque le code ayant recours à cette ressource est entièrement exécuté. L’instruction with
est couramment employée avec les flux de fichiers, comme démontré ci-dessus, ainsi qu’avec les verrous, les sockets, les processus fils et les connexions Telnet, entre autres.
L’instruction « with » dans nos objets
Il n’y a rien d’extraordinaire dans la fonction open()
qui la rend utilisable avec l’instruction with
, et une fonctionnalité similaire peut être implémentée dans des objets que nous avons définis.
En supportant l’instruction with
dans vos propres objets, vous vous assurez de ne jamais laisser de ressources ouvertes. Pour utiliser l’instruction with
dans des objets personnalisés, vous devez simplement inclure les méthodes __enter__()
et __exit__()
dans les méthodes de l’objet, comme illustré dans l’exemple suivant pour plus de clarté.
# a simple file writer object
class EcrireDansUnFichier(object):
def __init__(self, file_name):
self.file_name = file_name
def __enter__(self):
self.file = open(self.file_name, 'w')
return self.file
def __exit__(self, *args):
self.file.close()
# utilisation de with sur mon objet EcrireDansUnFichier
with EcrireDansUnFichier('mon_fichier.txt') as monFichier:
monFichier.write('hello world')
Regardons à présent comment le Python analyse notre code ci-dessus.
Dès que l’exécution pénètre dans le contexte de l’instruction with
, un objet EcrireDansUnFichier
est créé et Python appelle ensuite la méthode __enter__()
. À l’intérieur de cette méthode __enter__()
, vous effectuez l’initialisation de la ressource que vous souhaitez utiliser dans l’objet. Il est important de noter que cette méthode __enter__()
doit toujours renvoyer un descripteur de la ressource acquise.
Mais qu’entendons-nous par « descripteurs de ressources » ? Il s’agit des handles fournis par le système d’exploitation pour accéder aux ressources demandées. Dans le cas de l’exemple donné, file
est un descripteur de ressource pour le flux de fichiers.
Une fois que le code à l’intérieur du bloc with
s’est exécuté, la méthode __exit__()
est automatiquement appelée. C’est dans cette méthode __exit__()
que toutes les ressources acquises sont libérées. C’est précisément de cette manière que nous utilisons l’instruction with
avec des objets définis par l’utilisateur.
Cette interface, basée sur les méthodes __enter__()
et __exit__()
, qui permet de prendre en charge l’instruction with
avec des objets personnalisés, est appelée « Context Manager ».
Conclusion – Python With
A présent l’instruction Python with n’a plus de secret pour vous. En espérant que ce petit tutoriel vous sera utile pour améliorer l’ensemble de vos codes en Python.
Soyez le premier à commenter