Est explicitement la fermeture des fichiers importants?

En Python, si vous ouvrez un fichier sans appel close(), ou de fermer le fichier, mais pas à l'aide de try-finally ou le "with" déclaration, est-ce un problème? Ou qu'il ne suffit que d'une pratique de codage, de s'appuyer sur le Python garbage-collection pour fermer tous les fichiers? Par exemple, si on fait cela:

for line in open("filename"):
    # ... do stuff ...

... est-ce un problème parce que le fichier ne peut jamais être fermé et une exception peut se produire qui l'empêche d'être fermé? Ou cela est-il définitivement fermé à la fin de la for instruction, car le fichier est hors de portée?

Le fichier n' pas aller hors de portée à la fin de la for bloc. Son nombre de références sera à zéro, l'amenant à être fermée automatiquement, mais seulement des fonctions, des classes et des modules de définir les étendues en Python, pas de composés autres états.
Ce n'est pas un problème, sauf si c'est un problème. Au niveau de l'OS, tous les fichiers ouverts par le script sera fermé lorsque le script se termine, vous n'avez pas besoin de s'inquiéter à propos de la fermeture des fichiers dans d'accrochage de l'outil de scripts. Cependant, les processus ont une limite sur le nombre de fichiers ouverts, ils peuvent maintenir, sorte de longue durée ou des scripts complexes peuvent être plus prudent. En tout cas, c'est une bonne habitude de fermer vos fichiers.
Vous avez bien dit que le fichier n'est pas hors de portée, mais il n'est pas lié à la distinction entre for des blocs et des fonctions/classes/modules. C'est beaucoup plus simple: les objets n'ont pas étendues, seuls les noms ne. Il n'y a pas de nom qui fait référence à cet objet, donc il n'y a rien ici pour rester dans la portée ou hors de portée.
Mon commentaire est la correction de son hypothèse qu'il existe un champ d'application associés à la for boucle, et mentionnant que le dossier est fermé pour une raison tout à fait différente. Il n'entre pas dans ce sont étendues en Python, comme il n'est pas pertinent ici.
il y a une référence implicite étendue que pour la boucle... c'est un argument de la sémantique

OriginalL'auteur user553702 | 2011-09-13