Ausdrücklich schließen von Dateien wichtig?

In Python, wenn Sie entweder eine Datei öffnen, ohne close() oder schließen Sie die Datei, nicht aber mit try-finally oder die " with " - Anweisung, ist das ein problem? Oder hat es genügt als eine Codierung, die Praxis zu verlassen, auf dem Python garbage-collection zu schließen, alle Dateien? Zum Beispiel, wenn man das tut:

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

... ist das ein problem, da die Datei kann nicht verschlossen werden und eine Ausnahme auftreten könnte, verhindert, dass Sie geschlossen? Oder wird es definitiv geschlossen werden die bei Abschluss des for Aussage, weil die Datei außerhalb des Gültigkeitsbereichs?

Die Datei ist nicht go-out-of-scope am Ende der for block. Dessen Referenzzähler wird auf null gesetzt, wodurch es zu automatisch geschlossen werden, sondern nur Funktionen, Klassen und Module definieren von Bereichen in Python, nicht andere zusammengesetzte Aussagen.
Es ist nicht ein problem, es sei denn, es ist ein problem. Auf OS-Ebene, können alle Dateien geöffnet, indem das Skript wird geschlossen, wenn das Skript beendet, so müssen Sie sich keine sorgen über die Schließung Dateien in Wegwerf Scripte. Jedoch, Prozesse haben ein limit für die Anzahl offener Dateien, die Sie pflegen können, so lange gelebt oder komplexe Skripte können müssen vorsichtiger sein. In jedem Fall, es ist eine gute Angewohnheit, um zu schließen Sie Ihre Dateien.
Sie sind richtig, dass die Datei nicht mehr gültig sind, aber nicht im Zusammenhang mit der Unterscheidung zwischen for Blöcke und Funktionen/Klassen/Module. Es ist viel einfacher als das: Objekte nicht über Bereiche, nur Namen tun. Es gibt keinen Namen, bezieht sich auf dieses Objekt, es gibt also nichts, hier zu bleiben im Bereich oder außerhalb des Bereichs.
Mein Kommentar ist korrigiert seine Annahme, dass es einen Bereich im Zusammenhang mit der for Schleife, und der Erwähnung, dass die Datei geschlossen wird, für einen ganz anderen Grund. Es nicht in welche Bereiche sind in Python, da es hier nicht relevant.
es gibt eine implizite Referenz den Gültigkeitsbereich, die for-Schleife... das ist ein argument der Semantik

InformationsquelleAutor user553702 | 2011-09-13

Schreibe einen Kommentar