2016-07-20 14 views
1

Wenn ich eine Datei in einem Programm mit einer Endlosschleife schließen wollte, habe ich folgendes tun könnte:Python Datei Schließen auf Exit-Programm

file = open('abc', 'w') 

while True: 
    try: 
     file.write('a\n') 
    except KeyboardInterrupt: 
     break 

file.close() 

Aber wenn ich ließ es wie folgt aus:

file = open('abc', 'w') 

while True: 
    file.write('a\n') 

Wird die Datei beim Beenden nicht geschlossen?

+0

Mögliche Duplikat [? Sie Dateien während einer Ausnahme Ausgang geschlossen get] (http://stackoverflow.com/questions/17577137/do-files-get-closed -during-an-exception-exit) –

Antwort

0

Python hat automatic garbage collection. Garbage Collection ist das automatische Löschen nicht verwendeter Dateihandles oder Daten im Speicher. Wenn ein Python-Programm angehalten wird, wird es, wenn es sauber angehalten wurde, die Speicher- und Dateizugriffsnummern freigeben, die es beim Schließen verwendet hat. Es ist ratsam, sich mit der Funktionsweise der Speicherbereinigung vertraut zu machen, wenn Sie Programme schreiben, die längere Zeit laufen oder auf viele Informationen oder Dateien zugreifen.

+1

Dateien, die geschlossen werden, wenn ein Programm beendet wird, haben nichts mit Garbage Collection zu tun. – chepner

+0

Ich denke, das hängt davon ab, was Sie mit "geschlossen" meinen. Wenn ein Python-Programm entweder von einem Interrupt oder von einer normalen Beendigung beendet wurde, wird es alle Dateihandles freigeben, die es geöffnet hat. In Perl, mit dem ich viel vertrauter bin, wenn eine Funktion, die eine Datei geöffnet hat, verlassen wird und der Garbage Collector feststellt, dass das Dateihandle keine Referenzen mehr hat, wird das Dateihandle freigegeben und die Datei wird geschlossen. " Wenn Sie über Dateisperren besorgt sind, ist das ziemlich bedingt. Und nicht relevant für das Programmbeispiel. –

+0

Auch andere [große Antworten] (http://stackoverflow.com/questions/7395542/is-explicitly-closing-files-important) auf die gleiche Frage –

0

Wie oben erwähnt @Mitch Jackson, wenn ein Python-Programm sauber stoppt, wird es den Speicher freigeben. In Ihrem Fall, da Sie gerade eine Datei in einer While-Schleife öffnen. Das Programm wird nicht in der Lage sein, bereits geöffnete Dateien zu schließen, wenn es angehalten wird, es sei denn, Sie fügen explizit eine Ausnahmebehandlung wie eine try-catch block oder eine with-Anweisung, die es umschließt, ein.

Hier sind die Dokumentation auf with Aussage: docs