Seite 1 von 1

configparser.NoOptionError(option, section)

Verfasst: Dienstag 15. Oktober 2019, 13:30
von fredvonfat
Hallo zusammen,

gegeben:
- Windows Server2016
- Python 3.7.4
- configparser per pip installiert

*.cfg:

Code: Alles auswählen

[DEFAULT]
driver = {SQL SERVER}
server = ip-Adresse
database = DB
Trusted_Connection = yes

Auszug aus dem Script *.py:
[code]
import configparser

CONFIG_FILE_PATH = '\\Server\c$\scripts'
CONFIG_FILE = os.path.join(CONFIG_FILE_PATH, '*.cfg')
config = configparser.ConfigParser()
config.read(CONFIG_FILE)
server = config.get('DEFAULT', 'server')
database = config.get('DEFAULT', 'database')
Popwershell Ausgabe:

PS C:\scripts> & "C:/Program Files/Python37/python.exe" c:/scripts/F1_log_to_sql_win_esi1.py
c:/scripts/F1_log_to_sql_win_esi1.py:21: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
import pymssql
Traceback (most recent call last):
File "C:\Program Files\Python37\lib\configparser.py", line 788, in get
value = d[option]
File "C:\Program Files\Python37\lib\collections\__init__.py", line 916, in __getitem__
return self.__missing__(key) # support subclasses that define __missing__
File "C:\Program Files\Python37\lib\collections\__init__.py", line 908, in __missing__
raise KeyError(key)
KeyError: 'server'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "c:/scripts/F1_log_to_sql_win_esi1.py", line 38, in <module>
server = config.get('DEFAULT', 'server')
File "C:\Program Files\Python37\lib\configparser.py", line 791, in get
raise NoOptionError(option, section)
configparser.NoOptionError: No option 'server' in section: 'DEFAULT'[/code]

Das Script hatte unter Linux und auf einem w10 Rechner funktioniert.
Jetzt auf dem Server gibt es die Fehlermeldung.

Was übersehe ich hier bzw. wo muss ich nachschauen um die Funktion hinzubekommen?

Danke schon mal im Voraus

Re: configparser.NoOptionError(option, section)

Verfasst: Dienstag 15. Oktober 2019, 13:58
von fredvonfat
danke für eure Zeit, der Pfad zur CFG war unglücklich, jetzt geht es.

Re: configparser.NoOptionError(option, section)

Verfasst: Dienstag 15. Oktober 2019, 14:03
von __blackjack__
@fredvonfat: '*.cfg' wird hier als Dateiname verwendet — heisst die Datei *tatsächlich* so?

Die `read()`-Methode ignoriert Probleme beim lesen einfach, also zum Beispiel wenn es die Datei nicht gibt, und gibt eine Liste mit den erfolgreich gelesenen Dateinamen zurück. Steht aber auch alles laut und deutlich in der Dokumentation.

Re: configparser.NoOptionError(option, section)

Verfasst: Dienstag 15. Oktober 2019, 14:21
von fredvonfat
@_blackjack_
nein, die Datei heißt so nicht, der * fungiert hier als beliebige Zeichenfolge, da ich meine, das der tatsächliche Name nichts zur Sache tut.

Ich habe jetzt statt dem UNC-Pfad, den laufwerksbuchstaben angegeben und schon funktioniert das.

Allerdings stehe ich beim verstehen deines Hinweises ein wenig auf dem Schlauch.
Mir sagt die Fehlerausgabe, dass keine Option, "server" in der Sektion [default] gefunden wurde.

Das erweckt in mir 2 mögliche Zustände:
1. Das cfg-file wird nicht gefunden
und
2. Das cfg-file wird nicht richtig gelesen.

Punkt 1 hielt ich für unwahrscheinlich und habe eher Punkt 2 untersucht.

Darf ich Deinen Hinweis so, verstehen, dass du Punkt 1 für wahrscheinlicher hieltest, als Punkt 2?
Und die Files, die read() auflistet, sind, "c:/scripts/F1_log_to_sql_win_esi1.py" und "C:\Program Files\Python37\lib\configparser.py" ?

Wenn Punkt 2 zutreffen würde, würde read() dann das cfg-File ebenfalls auflisten?

Re: configparser.NoOptionError(option, section)

Verfasst: Dienstag 15. Oktober 2019, 14:36
von __blackjack__
@fredvonfat: Es werden alle `OSError` beim einlesen ”ignoriert”, das heisst wenn so etwas auftritt ist der Dateiname am Ende nicht im Ergebnis. Das kann übrigens auch bedeuten, dass das *während* des einlesens passiert ist, also schon Teile der Datei in das `ConfigParser`-Objekt eingetragen wurden!

Re: configparser.NoOptionError(option, section)

Verfasst: Dienstag 15. Oktober 2019, 14:46
von fredvonfat
Verstehe, wie kann ich beim debuggen sicherstellen, dass die Datei gefunden wird, aber der Fehler während des einlesens auftritt?

Re: configparser.NoOptionError(option, section)

Verfasst: Dienstag 15. Oktober 2019, 15:57
von __blackjack__
Falls mit „der Fehler“ ein `OSError` gemeint ist: gar nicht.