configparserをモジュール化?して使いたいと考えています。
しかし、下記コードで実行するとエラーに下記のエラーが出てしまいます。
.readはコンストラクタの中で実行していますが
get関数の中で実行してもうまくいきませんでした。
原因がわかる方がいらっしゃいましたらご教授願います。
settings_utils.py
import os import configparser from utils.logger import Logger # ログ出力クラス. log = Logger('SettingsUtils') #------------------------------------------------------------------------------- # コンフィグ管理クラス. #------------------------------------------------------------------------------- class SettingsUtils(): #--------------------------------------------------------------------------- # コンストラクタ. #--------------------------------------------------------------------------- def __init__(self): # 設定ファイルのインスタンス. self.config = configparser.ConfigParser() try: # リソースパス. filePath = './../settings.ini' # 設定ファイルを読み込む. self.config.read(filePath) except: log.fatal("unexpected error: ") #--------------------------------------------------------------------------- # 設定値の取得処理. #--------------------------------------------------------------------------- def get(self, name): result = '' try: result = self.config.get('SETTINGS', name) except: log.fatal("unexpected error: ") return result
エラーログ
2020-05-28 21:37:20,040 [CRITICAL] SettingsUtils( 32356): unexpected error: Traceback (most recent call last): File "/usr/lampnetrepeater/app/utils/settings_utils.py", line 58, in get result = self.config.get('SETTINGS', name) File "/usr/lib/python3.7/configparser.py", line 780, in get d = self._unify_values(section, vars) File "/usr/lib/python3.7/configparser.py", line 1146, in _unify_values raise NoSectionError(section) from None configparser.NoSectionError: No section: 'SETTINGS'
settings.ini
[DEFAULT] 〇〇〇〇 = 〇〇〇〇 〇〇〇〇 = 〇〇〇〇 [SETTINGS] 〇〇〇〇 = 〇〇〇〇 〇〇〇〇 = 〇〇〇〇
settings.iniの中身は記載可能でしょうか?
エラー内容はINIファイルの中に[SETTINGS]セクションがないということのようです。
'./../settings.ini' のファイルパスは正しいか(別のディレクトリ見てたとか)、その中に[SETTINGS]があるか、確認してみてください。
iniファイルを追記いたしました
申し訳ございませんが、内容は伏せさせていただいております。
ファイルパスも場所は違いますが、相対パスで記載しています。
(パスは合っているはずです...)
うーん、おかしいですね。
result = self.config.get('SETTINGS', name) を、
result = self.config['SETTINGS'][name] に変えても同じですかね。
あと、文字コードはどうなってますかね。
result = self.config['SETTINGS'][name]
↑で実行したところ
result = self.config['SETTINGS'][name]
File "/usr/lib/python3.7/configparser.py", line 958, in __getitem__
raise KeyError(key)
KeyError: 'SETTINGS'
が出てしまいます。
文字コードは、実行環境がラズパイなのでutf-8のLFにして保存し直してみましたが
状況は変わらずです...
やはり、ファイルをうまく認識していないように見えます。
print(self.config.sections()) でセクション一覧が出ますか?
ファイルの置き場所を変えたり別のセクションを指定して違いは出ませんかね。
log.info(self.config.sections())
上記実行で
SettingsUtils( 17653): []
となっていました
おっしゃるとおり、ファイルの認識がうまくいっていなさそうなので
置き場所を変えたりしてみます。
filePath = './settings.ini'
iniファイルを「settings_utils.py」と同じ階層において、実行いたしましたが
結果は変わらずでした。
ちょっと試してみましたが、指定したファイルが無くてもconfig.read(filePath)は失敗しませんね。
os.path.exists(filePath)でファイルの存在確認してみるとか、os.getcwd() でpythonが認識しているカレントディレクトリを確認してみるとかやってみましょう。
ありがとうございます!
試してみます!

回答1件
あなたの回答
tips
プレビュー