configparser / ini-Datei nicht gefunden / (relativer) pfad in python

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
drnicolas
User
Beiträge: 127
Registriert: Sonntag 24. Juli 2016, 10:32

Meine Anwendung läuft bisher über VS Code, soll aber jetzt eigenständig und unabhängig von einem USB-STick laufen.

Das ist vermutlich die Ursache für mein Problem:

Ich starte von E:
e:\python.exe e:\<Anwendung>

Das fun ktioniert zwar, aber beim Lesen einer Konfigurationsdatei klemmt es.

Der Name der Datei ist hardwired - wahrscheinlich keine gar so tolle Idee cf.read('ANwendung.ini')

Interessanterweise gibt es keinen filenotfoundError oder so etwas, sondern erst später einen KeyError, weil wohl bei fehlender config-Datei die Keys-AUflistung einfach leer ist. Wusste ich bisher nicht.

Versuchsweise habe ich die read-Anweisung auf "e:\<Anwendung.ini>" geändert - und damit geht es.

Wie löse ich das eleganter? Die ini-Datei soll im gleichen Verzeichnis/Pfad gesucht werden wie die Python-Datei.
Benutzeravatar
__blackjack__
User
Beiträge: 14325
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@drnicolas: Module haben den Namen `__file__` definiert, als Pfad dieser Datei. Davon den Verzeichnisteil nehmen (`Path.parent`) und man hat das Verzeichnis in dem das Modul liegt.

`Configparser.read()` löst absichtlich keine Ausnahme aus, weil man dort auch mehrere Dateinamen übergeben kann, zum Beispiel um zu ermöglichen das in verschiedenen Verzeichnissen optionale Konfigurationsdateien liegen. Die Methode hat einen Rückgabewert. Die Dokumentation weiss mehr.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Antworten