Python 3.2+configparserпонятие
configparser.BasicInterpolation
интерполяция
Интерполяция по умолчанию у ConfigParser: %(имя)s подставляет ключ той же секции или из [DEFAULT]; знак процента пишется как %%.
Синтаксис
configparser.ConfigParser(interpolation=configparser.BasicInterpolation())
Именно из-за неё строка '50%' или пароль с % падает с InterpolationSyntaxError — причём при get(), а не при чтении файла. Выходы: удвоить % в файле, get(..., raw=True) или ConfigParser(interpolation=None). Запись set('k', '5%') отбрасывается сразу с ValueError. Ссылки на другие секции %(...)s не умеет — это ExtendedInterpolation.
Примеры
import configparser
cfg = configparser.ConfigParser()
cfg.read_string("[paths]\nhome = /home/ann\ndata = %(home)s/data\ngain = 80%%\n")
print(cfg.get("paths", "data")) # → /home/ann/data
print(cfg.get("paths", "gain")) # → 80%
print(cfg.get("paths", "data", raw=True)) # → %(home)s/data
import configparser
cfg = configparser.ConfigParser()
cfg.read_string("[db]\nrate = 50%\n") # чтение проходит
try:
cfg.get("db", "rate")
except configparser.InterpolationSyntaxError as e:
print(type(e).__name__) # → InterpolationSyntaxError
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности