ConfigParser: Wie setzt man Default-Werte?

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.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

@api: Wäre interessant, wie deine Config aussieht. Bei mir hier funzt alles, wie erwartet:

foo.conf

Code: Alles auswählen

[main]
foo=xxx

[blubber]
bar=yyy
test.py

Code: Alles auswählen

from ConfigParser import SafeConfigParser

config = SafeConfigParser({"foo": "123", "bar": "456", "baz": "789"})
config.read("foo.conf")

print "main", config.get("main", "foo")
print "main", config.get("main", "bar")
print "main", config.get("main", "baz")

print "blubber", config.get("blubber", "bar")
print "blubber", config.get("blubber", "baz")
Ausgabe

Code: Alles auswählen

main xxx
main 456
main 789
blubber yyy
blubber 789
Gruß,
Manuel
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

@helduel: Ich habe das mal ausprobiert und mich wirklich gefragt, warum ich das wie oben beschrieben realisiert habe... Dann hab ich das nach deiner Lösung umgesetzt - und du hast recht: Das ist ja viel einfacher und übersichtlicher. Das Problem bei mir war die Config-Datei. Sie hatte folgendes Aussehen:

Code: Alles auswählen

[CONF] 
LOG_LEVEL=1 
Mit den großen Buchstaben funzt das aber nicht und wirft eben eine Fehlermeldung... :(

Wenn ich die Config-Datei so umsetze:

Code: Alles auswählen

[CONF] 
log_level=1 
und alle anderen Keys ebenfalls in Kleinbuchstaben, dann ist alles wie erwartet...

Na, wunderbar... :D

CU,
API
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

@DasIch: Mich würde mal interessieren, warum du diese "Lösung" als Verbrechen! bezeichnest. Könntest du diese Aussage mal konkretisieren, denn mit mit diesem Statement alleine kann ich nun aber auch gar nichts anfangen. :(
Ich bin ja gerne bereit, andere Lösungsvorschläge zu akzeptieren, aber etwas detaillierter würde schon etwas mehr dazu beitragen...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich nehme mal an dass du die Funktionen konsequent falsch beannt hast und weil du alle Exceptions schluckst, was schlichtweg schädlich ist, da du so auch Exceptions fängst die du eigentlich gar nicht fangen wolltest.
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

@Leonidas: Mit den Exceptions gebe ich dir recht. Das alles mit einer einzigen abzufackeln ist nicht wirklich sauber. Aber ich habe das als Beispiel angesehen und in der realen Lösung hätten da nicht nur ein paar mehr sondern auch eindeutigere Exceptions gestanden.
Es ging mir in diesem Augenblick mehr um das Handling mit dem ConfigParser.

Aber was mich dann doch interessieren würde, was du mit konsequenter Falschbenennung von Funktionen meinst? Was mache ich da falsch? Nenn mir doch bitte mal ein Beispiel und wenn möglich dann gleich auch wie es richtig sein müsste...

CU,
API
lunar

api hat geschrieben:Aber ich habe das als Beispiel angesehen und in der realen Lösung hätten da nicht nur ein paar mehr sondern auch eindeutigere Exceptions gestanden.
Auch in einem Beispiel solltest du auf sauberen Code achten.
Aber was mich dann doch interessieren würde, was du mit konsequenter Falschbenennung von Funktionen meinst?
Die Missachtung der Namenskonventionen in PEP 8.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

api hat geschrieben:@DasIch: Mich würde mal interessieren, warum du diese "Lösung" als Verbrechen! bezeichnest.
Die Benennung ist inhaltlich falsch(wo wird das was gesetzt?) und du hälst dich nicht an PEP 8.

Reine excepts sind außer bei etwa einer handvoll Ausnahmen nicht in Ordnung und auf config als globale Variable innerhalb der Funktion zuzugreifen ist imho nicht akzeptabel.

Desweiteren scheinst den Fall dass kein default Wert existiert nicht zu beachten, ich fände ein NoOptionError in diesem Fall auf jedenfall angebrachter als einen KeyError.
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

@DasIch: Jetzt weiß ich, was du meinst... :?

Von dem Standpunkt gesehen, habe ich wirklich so ziemlich gegen alles verstoßen, was man als vernünftiger Entwickler besser nicht tun sollte (ok, ok, ich sehe es ein...)

@Alle: Aber ich habe es wirklich - wie oben schon gesagt - als ein Beispiel angesehen, und wollte mit meiner "Lösung" nur zum Ausdruck bringen, dass mir geholfen wurde...

Allerdings ist es auch nicht ok, wenn Lösungen gepostet werden, die so nicht haltbar und umsetzbar sind - das werde ich demnächst anders anstellen... :!:

Trotzdem nochmal Danke an Alle.. :)
Antworten