Python: не удается прочитать свойства из файла свойств

Я пытаюсь прочитать конфигурации из файла свойств и сохранить эти свойства в переменной, чтобы к ней можно было получить доступ из любого другого класса.

Я могу прочитать конфигурацию из файла конфигурации и распечатать то же самое, но получаю исключение, когда к этим переменным обращаются из какого-то другого класса.

мой конфигурационный файл

Config.cfg.txt
    [Ysl_Leader]
    YSL_LEADER=192

Общий класс, где я буду хранить свои свойства в переменной. ConfigReader.py

    import configparser

        class DockerDetails:
            config = configparser.RawConfigParser()
            _SECTION = 'Ysl_Leader'
            config.read('Config.cfg.txt')
            YSL_Leader = config.get('Ysl_Leader', 'YSL_LEADER')
            print(YSL_Leader)

Другой класс, где я пытаюсь получить значение YSL_Leader

def logger(request):
    print(ConfigReader.DockerDetails.YSL_Leader)

Исключение:

  File "C:\Users\pvivek\AppData\Local\Programs\Python\Python37-32\lib\configparser.py", line 780, in get
    d = self._unify_values(section, vars)
  File "C:\Users\pvivek\AppData\Local\Programs\Python\Python37-32\lib\configparser.py", line 1146, in _unify_values
    raise NoSectionError(section) from None
configparser.NoSectionError: No section: 'Ysl_Leader'

К вашему сведению: я не получаю никаких исключений, когда запускаю один ConfigReader.py

1 ответ

Анализируя ваш вопрос, вы пытаетесь создать файл среды, если это так, потому что вы используете класс для чтения файла, вы должны выполнить эту операцию в его конструкторе (не забудьте сделать ссылку самостоятельно) и создать экземпляр, чтобы иметь возможность доступа его значения, вы можете прекрасно использовать функцию для выполнения этого чтения, помня, что для доступа к результату можно рассматривать как словарь

имя файла конфигурации = (config.ini)

[DEFAULT]
ANY = ANY

[Ysl_Leader]
YSL_LEADER = 192

[OTHER]
VALUE = value_config
# using classes
class Cenv(object):
    """
    [use the constructor to start reading the file]
    """
    def __init__(self):
        self.config = configparser.ConfigParser()
        self.config.read('config.ini')

# using functions
def Fenv():
    config = configparser.ConfigParser()
    config.read('config.ini')
    return config

def main():
    # to be able to access it is necessary to instantiate the class
    instance = Cenv()
    cfg = instance.config
    # access the elements using the key (like dictionaries) 
    print(cfg['Ysl_Leader']['YSL_LEADER'])
    print(cfg['OTHER']['VALUE'])

    # call function and assign returned values
    cfg = Fenv()
    print(cfg['Ysl_Leader']['YSL_LEADER'])
    print(cfg['OTHER']['VALUE'])
    # in the case of django assign values ​​in module settings

if __name__ == '__main__':
    main()

Вы можете интерпретировать результат следующим образом (словарь)

{
    "Ysl_Leader": {
        "YSL_LEADER": "192"
    },
    "OTHER": {
        "VALUE": "value_config"
    }
}
Другие вопросы по тегам