Fichier ouvrir et fermer en python
J'ai lu que lorsque le fichier est ouvert en utilisant le format ci-dessous
with open(filename) as f:
#My Code
f.close()
explicite de clôture de fichier n'est pas nécessaire . Quelqu'un peut m'expliquer pourquoi est-il si ? Aussi, si quelqu'un fait explicitement fermez le fichier quelconque effet indésirable ?
effbot.org/zone/python-with-statement.htm
J'ai supprimé la balise
J'ai supprimé la balise
python-2.7
parce que l'instruction n'est pas spécifique à cette version de Python. L'instruction a été introduit dans Python 2.5 et est depuis lors une caractéristique fondamentale de Python. Un blog interessant sur ce sujet est ici: preshing.com/20110920/the-python-with-statement-by-example)OriginalL'auteur misguided | 2013-07-03
Vous devez vous connecter pour publier un commentaire.
La mile-high aperçu, c'est que Lorsque vous quittez le bloc imbriqué, Python automatiquement les appels
f.close()
pour vous.Il n'a pas d'importance si vous partez en train de tomber sur le fond, ou en appelant le
break
/continue
/return
à sauter hors de lui, ou de soulever une exception, peu importe comment vous quittez le bloc. Il toujours sait que vous êtes en laissant, de sorte qu'il toujours ferme le fichier.*Descend d'un niveau, vous pouvez la considérer comme la cartographie de la
try:
/finally:
déclaration:Un niveau plus bas: Comment sait-elle appeler
close
au lieu de quelque chose de différent?Bien, il n'a pas vraiment. Il fait des appels à des méthodes spéciales
__enter__
et__exit__
:Et de l'objet renvoyé par
open
(unfile
en Python 2, l'un des wrappers dansio
en Python 3) a quelque chose comme ça:La réalité est un peu plus compliqué que la dernière version, ce qui en fait plus facile de générer de meilleurs messages d'erreur et vous permet de Python éviter "d'entrer" dans un bloc qu'il ne sait pas comment "sortir".
Pour comprendre tous les détails, lire PEP 343.
En général, c'est une mauvaise chose à faire.
Cependant, les objets de fichier de sortir de leur façon de faire c'est sûr. C'est une erreur de faire quelque chose d'un fichier fermé, sauf à
close
de nouveau.* * À moins que vous laissez, disons, en tirant le cordon d'alimentation sur le serveur dans le milieu de l'exécution de votre script. Dans ce cas, évidemment, il n'arrive jamais à exécuter tout code, beaucoup moins le
close
. Mais expliciteclose
ne serait guère vous aider.OriginalL'auteur abarnert
Fermeture n'est pas nécessaire parce que la
with
déclaration prend automatiquement soin de tout cela.Dans le
with
déclaration de la__enter__
méthode suropen(...)
est appelé et dès que vous sortez de l'immeuble de la__exit__
méthode est appelée.Afin de le fermer manuellement est juste inutile depuis la
__exit__
méthode prendra soin de cela automatiquement.Comme pour le
f.close()
après, ce n'est pas mal, mais inutile. Il est déjà fermé afin de ne pas faire n'importe quoi.Voir aussi cet article sur le blog pour plus d'infos sur le
with
déclaration: http://effbot.org/zone/python-with-statement.htmOriginalL'auteur Wolph