[gelöst] Python-Version auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
lunar

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".
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.

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Leonidas hat geschrieben:Statt ``if f == None:`` besser ``if f is None`` denn ``None`` ist tatsächlich ein Singleton und man kann auf Objektidentität testen.
In dem Sinne kannst du auch `if module == '':' anpassen -> `if not module:'
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

try: return ... except / finally: funktioniert immer.
BlackJack

@cofi: Das geht nicht, weil vom ersten Fall dann auch `None` erfasst würde, das im gezeigten Quelltext aber anders behandelt werden soll als die leere Zeichenkette.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wobei die Trennung von leeren Strings und None keinen großen Sinn ergibt bzw man bei None ebenfalls den ImportError (oder vielleicht besser einen ValueError?) raisen könnte.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Da muss ich widersprechen. None und ein leerer String als ein an die Funktion übergebenes Argument sollen gleich behandelt werden. Die Funktion gibt nur ein None _zurück_, wenn das Modul zwar existiert, aber keine eigene py-Datei hat. Denn dann is "f" None.

Das mit dem ValueError ist eine gute Idee. Werde ich einbauen...
Antworten