kurze with-Frage

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.
Antworten
heiliga horsd

Hallo Forum,

ich habe eine kurze Frage zum with-Statement:

Bisher habe ich Dateien immer so eingebunden:

Code: Alles auswählen

f = open(foo)
Hatte halt den Vorteil, dass ich bequem mit der variable f arbeiten kann.
Nun das Problem mit with:

bei

Code: Alles auswählen

with open foo as f:
Wenn ich diese (anscheinend bessere) variante verwenden will, muss ich also das ganze Programm um einen Tabulator unter das with-Statement einrücken. Seh ich das richtig?

Lg HH
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Besser mit 4 Leerzeichen, aber sonst stimmt das.
heiliga horsd

Macht das IDLE denn nicht automatisch? Tabulator ist halt einfach & schnell.

Das "Programm", bei dem das zum Einsatz kommt, ist eigentlich lediglich eine Funktionssammlung, bei dem die Funktionen einfach aus einer anderen Datei (Hauptprogramm) heraus aufgerufen werden - kann ich da Probleme bekommen?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Packe innerhalb des with-statement nur Sachen, die da auch wirklich rein müssen und da hingehören!

Code: Alles auswählen

with open('foo', 'w') as f:
    a = 23
    b = 43
    f.write(a+b)
ist sinnlos, weil die Zuweisungen auch außerhalb des with-statement stehen können.

Das gleiche gilt für try-Blöcke: packe so wenig wie möglich da rein!
heiliga horsd

Naja, ist halt blöd, weil ich so ziemlich in jeder Funktion den Zugriff auf die Datei brauche und wenn ich im Programm 20x das selbe with drin hab ist das denke ich mal nicht "Don't repeat yourself"-konform, oder?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

heiliga horsd hat geschrieben:Naja, ist halt blöd, weil ich so ziemlich in jeder Funktion den Zugriff auf die Datei brauche und wenn ich im Programm 20x das selbe with drin hab ist das denke ich mal nicht "Don't repeat yourself"-konform, oder?
Wieso übergibst Du dann das File Objekt nicht einfach an andere Funktionen, die dann etwas da rein schreiben?

Generell scheint das aber auch ein suboptimales Design zu sein. Wieso kapselst Du den Zugriff nicht in eine Funktion fürs Lesen und eine fürs Schreiben und rufst diese dann aus den 20 Funktionen heraus auf?
heiliga horsd

Das ist eine gute Idee, da hätte ich selber drauf kommen können, Danke!
Werd das gleich mal umsetzen!
Antworten