Um die FogleBird-Antwort zu erweitern, wird die Datei automatisch geschlossen, wenn das Dateiobjekt zerstört wird. In CPython wird dies geschehen, sobald es keine Referenzen mehr gibt, z. wenn es sich um eine lokale Variable in einer Funktion handelt und die Funktion endet. Wenn jedoch eine Ausnahme in der Funktion ausgelöst wird und die Datei nicht explizit mit einer with
-Anweisung oder try:...finally:
geschlossen wird, wird ein Verweis auf die Datei als Teil des Stack-Trace im traceback-Objekt beibehalten, und die Datei wird nicht geschlossen, um mindestens bis die nächste Ausnahme ausgelöst wird.
Auch IronPython und Jython verwenden die Speicherbereinigungsfunktionen der .NET CLR bzw. Java JVM. Diese werden nicht gezählt, so dass die Datei unbegrenzt geöffnet bleibt, bis der Garbage Collector entscheidet, den Speicher des Objekts zurückzufordern oder das Programm beendet wird.
Im Allgemeinen ist es wichtig, die Datei explizit mit with:
oder try:...finally:
zu schließen.
Natürlich gilt dies für alle anderen Objekttypen, die eine explizite Bereinigung erfordern.
Nur zu erwähnen: Datei gibt ein Dateiobjekt zurück, das eine close-Methode hat. Das wäre die einfachste Lösung, aber "mit" ist offensichtlich die bessere Lösung. – Achim
Ich habe ein Problem - ich habe nicht 'mit' in meinem Python. Ist es in Ordnung, aus der Zukunft zu importieren? Ich habe Python 2.5. – bodacydo
Wenn Sie Python 2.5 haben, dann ja. –