ConfigParser - получить весь раздел как dict и установить значения - PullRequest
0 голосов
/ 04 декабря 2018

То, что я хотел бы сделать (в идеале), это использовать with со словарем, чтобы установить целый раздел параметров одновременно.После некоторых экспериментов я придумал следующий код, который вызывает AttributeError:

import configparser
import os

CONFIG_PATH = os.path.abspath(os.path.dirname(__file__)) + '/config.ini'
config = configparser.ConfigParser()
assert open(CONFIG_PATH)
config.read(CONFIG_PATH)

with dict(config.items('Settings')) as c:
    c['username'] = input('Enter username: ')

файл config.ini:

[Settings]
username = ''

Трассировка:

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    with dict(config.items('Settings')) as c:
AttributeError: __enter__

Мне кажется, что я неправильно использую configparser, но я хотел бы написать красивый код для установки config.ini параметров.

1 Ответ

0 голосов
/ 05 декабря 2018

Нельзя использовать словарь с with, потому что dict не является контекстным менеджером.

with dict() as d:
    print d

вывод:

Traceback (most recent call last):
  File "Main.py", line 6, in <module>
    with dict() as d:
AttributeError: __exit__

https://paiza.io/projects/aPGRmOEmydbJL2ZeRtF-3A?language=python

Объект должен определять __enter__ и __exit__ для использования в качестве диспетчера контекста.

документация: http://book.pythontips.com/en/latest/context_managers.html

...