2021年7月4日日曜日

PythonのConfigParserで%のエラーが出たときの対処

Pythonでは.iniファイルからConfigParser で読むことができます。そのときに、値に%が入っているとエラーがでることがあり、その対象方法です。

setting.ini ファイルにこのような情報がキーバリューがあったとします。ウィキペディアのトップページです。
[web-page]
URL = https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8

呼び出し側の記述を何も考えずにデフォルトのままにすると、config["web-page"]["URL"]の部分で失敗します。

import configparser
config = configparser.ConfigParser()
config.read("setting.ini")
URL = config["web-page"]["URL"]

...

Traceback (most recent call last):
...
  File "/.../anaconda3/lib/python3.7/configparser.py", line 444, in _interpolate_some
    "found: %r" % (rest,))
configparser.InterpolationSyntaxError: '%' must be followed by '%' or '(', found: '%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8'

対処方法

%で補完してくれる機能があってそのときの記号として%を使うとおかしなことになっていますよ、というエラーが出ている状態ですので、
interpolation=None を使って補完を無視します。
import configparser
config = configparser.ConfigParser(interpolation=None)
config.read("setting.ini")
URL = config["web-page"]["URL"] 
これで読み込めます。

0 件のコメント:

コメントを投稿