Как разобрать логическое значение с парсером конфигурации - PullRequest
1 голос
/ 27 января 2020

Используя встроенную python configparser, я хочу проанализировать логические значения в моем файле конфигурации.

Пример:

[SECTION]
foo = False

Однако при обращении к переменной я замечаю что он обрабатывается как строка.

>>> config['SECTION']['foo']
'False'

Кроме того, когда я пытаюсь исправить это поведение и переназначить ключ foo на его правильный логический представитель, я получаю эту ошибку

>>>         if config['SECTION']['foo'] == 'True':
...             config['SECTION']['foo'] = True
...         elif config['SECTION']['foo'] == 'False':                                                                                                                                      
...             config['SECTION']['foo'] = False
...         else:                                    
...             Exception("foo must be bool")
TypeError: option values must be strings                                                                                                                                                      

К сожалению, такое поведение приводит к проблемным c ситуациям, когда следующее неожиданно работает

print(config['SECTION']['foo']) # 'False'

if config['SECTION']['foo']:
   print('do things when foo is True') # this runs, but foo actually 
                                       # represents false, but in string form

Как я должен иметь дело с логическими значениями при синтаксическом анализе configparser с наименьшим количеством накладных расходов, насколько это возможно?

1 Ответ

1 голос
/ 27 января 2020

Вы хотите использовать getboolean, функцию для объекта раздела.

Например

>>> config['SECTION'].getboolean('foo')
False

Документация

...