【configparser】別セクションの値を使う


はじめに

iniファイルで設定値を作成してみた。
そこでappDirで定義した値を他のところでも使いたいと思って、↓のような感じで作ったらエラーになった。

iniファイル
[base]
appDir=D:\Develop

[api]
downloadDir=%(appDir)s\download
iniファイル読み込み
from configparser import ConfigParser

config = ConfigParser()
config.read("config/app.ini")
print(config["api"]["downloadDir"])

エラー内容

configparser.InterpolationMissingOptionError: Bad value substitution

解決方法

別セクションで定義した値を使いたい場合は、ExtendedInterpolationを使う

https://docs.python.org/ja/3/library/configparser.html#configparser.ExtendedInterpolation

変更後iniファイル
[base]
appDir=D:\Develop

[api]
downloadDir=${base:appDir}\download
ExtendedInterpolationを使う
from configparser import ConfigParser, ExtendedInterpolation

config = ConfigParser(interpolation=ExtendedInterpolation())
config.read("config/app.ini")
print(config["api"]["downloadDir"])
結果
D:\Develop\download