configparser NoOptionError
-
- User
- Beiträge: 728
- Registriert: Sonntag 22. September 2002, 08:32
- Wohnort: Sauerland
- Kontaktdaten:
Versuche gerade meinem Programm einige Einstellungen beizubingen. Die sollen aus einer Configdatei kommen, welche augenblicklich NICHT existiert. Beim Zugriff auf [section][Schlüssel] mit configparser.getint() wir im Modul configparser eine Exeption NoOptionError ausgelöst. Mit try: except: kann ich den nicht abfangen. Wie löst man ein solches Problem? muss ich die Klassen NoOptionError und Error (eventuell noch andere) aus dem configparser ableiten?
- noisefloor
- User
- Beiträge: 3843
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
ich würde dein vorgehen mal ganz platt also "absurd" bezeichnen. Du programmierst etwas, was 100% einen Fehler wirft und versuchst dann, den Fehler abzufangen. Programmiere doch direkt so, dass normalerweise _kein_ Fehler geworfen wird, sondern nur, wenn wirklich unvorhergesehener Weise was schief läuft. Konkret: füll' die Config-Datei mit Leben.
Gruß, noisefloor
ich würde dein vorgehen mal ganz platt also "absurd" bezeichnen. Du programmierst etwas, was 100% einen Fehler wirft und versuchst dann, den Fehler abzufangen. Programmiere doch direkt so, dass normalerweise _kein_ Fehler geworfen wird, sondern nur, wenn wirklich unvorhergesehener Weise was schief läuft. Konkret: füll' die Config-Datei mit Leben.
Gruß, noisefloor
-
- User
- Beiträge: 728
- Registriert: Sonntag 22. September 2002, 08:32
- Wohnort: Sauerland
- Kontaktdaten:
@Noisfloor: Lernphase Aber das ist doch nicht ungewöhnlich, dass z.B. eine neue Programmversion erst einmal keine Schlüssel und Defaultwerte beim ersten Start vorfindet.Da muss es eine Lösung geben. Klar kann ich einen Editor nehmen und die Datei anlegen. Aber erkläre einem DAU mal, er solle den vim öffnen, ........
- noisefloor
- User
- Beiträge: 3843
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Dein ursprüngliches Problem kann ich ansonsten auch nicht nachvollziehen - der Fehler ist doch wie alle anderen Exceptions in Python auch abfangbar.
Wenn du `import configparser` (Python 3) machst, kannst du den Fehler mit `except configparser.NoOptionError` abfangen.
Gruß, noisefloor
Sehe ich anders. Wenn es keine Schlüssel-Werte Paare gibt, dann muss es eben Default-Werte geben, damit das Programm funktioniert. Die ganzen `get` Sachen des configparser-Moduls kennen dafür z.B. die Option `fallback` - siehe Doku.Aber das ist doch nicht ungewöhnlich, dass z.B. eine neue Programmversion erst einmal keine Schlüssel und Defaultwerte beim ersten Start vorfindet.
Wenn du für Systeme programmierst, wo nur vim als Editor installiert ist, sitzt garantiert auch kein DAU davorKlar kann ich einen Editor nehmen und die Datei anlegen. Aber erkläre einem DAU mal, er solle den vim öffnen, ........
Dein ursprüngliches Problem kann ich ansonsten auch nicht nachvollziehen - der Fehler ist doch wie alle anderen Exceptions in Python auch abfangbar.
Wenn du `import configparser` (Python 3) machst, kannst du den Fehler mit `except configparser.NoOptionError` abfangen.
Gruß, noisefloor
-
- User
- Beiträge: 728
- Registriert: Sonntag 22. September 2002, 08:32
- Wohnort: Sauerland
- Kontaktdaten:
habe ich probiert. Wenn du sagst das muss gehen, dann probier ich halt so lange, bis es geht!noisefloor hat geschrieben:Die ganzen `get` Sachen des configparser-Moduls kennen dafür z.B. die Option `fallback` - siehe Doku.
Meine Erfahrungen sind da leider anders. Und für Windows gibt es den auch, da heißt er allerdings gvim.noisefloor hat geschrieben:Wenn du für Systeme programmierst, wo nur vim als Editor installiert ist, sitzt garantiert auch kein DAU davor
Fehler abfangen ging leider nicht. Siehe hier
Code: Alles auswählen
except NoOptionError:
NameError: name 'NoOptionError' is not defined
- noisefloor
- User
- Beiträge: 3843
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Und das geht ohne Probleme (Python 3.4):
Gruß, noisefloor
Weil du da wohl was falsch machst... Schau dir den letzten Satz meines vorherigen Posts nochmal _genau_ an und achte drauf a) was importiert wird und b) was hinter dem `except` steht.Fehler abfangen ging leider nicht. Siehe hier
Na ja, wie ein anderer, hier im Forum sehr aktiver User dir schon mehrfach sagte: "Programmieren ist nicht raten"habe ich probiert. Wenn du sagst das muss gehen, dann probier ich halt so lange, bis es geht!
Und das geht ohne Probleme (Python 3.4):
Code: Alles auswählen
>>> import configparser
>>> config = configparser.ConfigParser()
>>> config['something'] = {'foo': 'bar', 'spam': '42'}
>>> config.get('something', 'foo')
'bar'
>>> config.get('something', 'egg', fallback='some default value')
'some default value'
>>>
-
- User
- Beiträge: 728
- Registriert: Sonntag 22. September 2002, 08:32
- Wohnort: Sauerland
- Kontaktdaten:
Danke für das Beispiel. Dann lag es bei mir wohl daran, dass ich das von einem "leeren" Config Objekt probiert habe. Ich baue den Code einmal um, habe schon eine Idee wie ich das idiotensicher bekomme.
Jo und der NoOptionError ist jetzt auch in meinem Hirn importiert worden.
Jo und der NoOptionError ist jetzt auch in meinem Hirn importiert worden.
- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
Solche Sätze empfinde ich als sehr arrogant und beleidigend und deshalb völlig überflüssig in diesem Forum.noisefloor hat geschrieben:(...)
Na ja, wie ein anderer, hier im Forum sehr aktiver User dir schon mehrfach sagte: "Programmieren ist nicht raten"
(...)
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw
@miracle173: Aber wenn es doch zutrifft, sogar nach den eigenen Aussagen des Fragestellers, der in mehr als einem Thema hier solange rumprobiert bis es funktioniert. Statt zu verstehen wie etwas funktioniert und es dann zielgerichtet anzuwenden? Wie würdest Du diesen Umstand denn formulieren?
-
- User
- Beiträge: 728
- Registriert: Sonntag 22. September 2002, 08:32
- Wohnort: Sauerland
- Kontaktdaten:
Na na, nun schlagt euch nicht Problem ist, dass all mein Wissen, war aber auch da nicht tiefgreifend, in den letzten Jahren vor Schütt gegangen ist. Bin mittlerweile doch schon um einiges weitergekommen, weiter als ich je war.
Und wenn man weder mit der Doku, noch der help(modul) oder Einsicht in ein Modul weiterkommt, dann wird probiert bis es geht. Nicht sehr schnell aber trotzdem effektiv. Das vergisst man so schnell nicht. Ich denke, ich weiß schon wann es gefährlich wird. Dann lasse ich es lieber bleiben.
Und Google kann mir auch nicht weiterhelfen, wenn ich nicht weiß wonach ich suchen soll.
Und wenn man weder mit der Doku, noch der help(modul) oder Einsicht in ein Modul weiterkommt, dann wird probiert bis es geht. Nicht sehr schnell aber trotzdem effektiv. Das vergisst man so schnell nicht. Ich denke, ich weiß schon wann es gefährlich wird. Dann lasse ich es lieber bleiben.
Und Google kann mir auch nicht weiterhelfen, wenn ich nicht weiß wonach ich suchen soll.
- noisefloor
- User
- Beiträge: 3843
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Das Problem bei "Raten statt Programmieren" ist ja, dass vielleicht was lauffähiges dabei raus kommt, aber das ist dann in der Regel weder "schön" noch robust noch sonst irgendwas. Ausserdem hilft es ja auch immer, wenn man am Ende versteht, was man sich da zusammen gehackt hat
Gruß, noisefloor
Also wenn man englische Suchbegriffe verwendet und der Suche noch `python` voranstellt, liefert Google in der Regel gute Treffer, wenn das Problem nicht total exotisch ist. Die ersten Treffer sind in der Regel die offizielle Doku und Threads bei Stack Overflow.Und wenn man weder mit der Doku, noch der help(modul) oder Einsicht in ein Modul weiterkommt, dann wird probiert bis es geht.
Das Problem bei "Raten statt Programmieren" ist ja, dass vielleicht was lauffähiges dabei raus kommt, aber das ist dann in der Regel weder "schön" noch robust noch sonst irgendwas. Ausserdem hilft es ja auch immer, wenn man am Ende versteht, was man sich da zusammen gehackt hat
Gruß, noisefloor
-
- User
- Beiträge: 728
- Registriert: Sonntag 22. September 2002, 08:32
- Wohnort: Sauerland
- Kontaktdaten:
Richtig. Aber wenn du den Begriff nicht kennst, dann hilft auch Google nicht weiter. Grundkenntnisse müssen da sein.noisefloor hat geschrieben:Also wenn man englische Suchbegriffe verwendet und der Suche noch `python` voranstellt, liefert Google in der Regel gute Treffer
Genau das ist der Punkt. Programmieren ist für mich auch immer lernen. Ich weiß was ich als Ergebnis haben will, also arbeite ich auf das Ziel hin. Und wenn das Programm mir an irgendeiner Ecke missfällt, z.B. mangelnde Stabilität, dann arbeite ich daran, es zu verbessern.noisefloor hat geschrieben:Ausserdem hilft es ja auch immer, wenn man am Ende versteht, was man sich da zusammen gehackt hat
- noisefloor
- User
- Beiträge: 3843
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Na ja... aber wenn du dein Problem nicht beschreiben kannst, dann hast du nicht ein, sondern zwei Probleme
Gruß, noisefloor
.Richtig. Aber wenn du den Begriff nicht kennst, dann hilft auch Google nicht weiter. Grundkenntnisse müssen da sein.
Na ja... aber wenn du dein Problem nicht beschreiben kannst, dann hast du nicht ein, sondern zwei Probleme
Gruß, noisefloor