Vom "Datei-Objekt" kann man ja nicht mehr sprechen, da der Python-Interpreter zu diesem Zeitpunkt tot ist. Auf Betriebssystemebene werden die Ressourcen des Prozesses auf jeden Fall geschlossen, allerdings liegt zwischen dem Python-Interpreter und dem System noch die Standardbibliothek von C, die meist noch puffert. Dieser interne Puffer geht verloren, wenn sich das Programm nicht sauber beendet. Wenn man nur liest, ist das egal, weil der Puffer eh nur wiedergibt, was sich auf der Festplatte befindet.snafu hat geschrieben:@lunar: Selbst wenn ich jetzt mehrere Zeilen (z.B. für mehrere Module) ausgeben und diese Ausgabe tatsächlich durch ein Programm wie "head" begrenzen würde, dann wäre das Dateiobjekt aber in meinem Fall trotzdem geschlossen, bevor das print aus main() etwas in die Konsole schreibt, oder? Also jetzt bezogen auf die Variante ohne "finally".
Beim Schreiben allerdings gehen unter Umständen Daten verloren, deshalb sollte man Dateien, in die man schreibt, immer mit finally schließen oder innerhalb eines with-Statements verwenden. Nur so kann garantiert werden, dass die internen Puffer sauber gelehrt werden, sprich dass alle Daten, die man per "write" in die Datei schreibt, auch wirklich auf der Platte landen.