ConfigParser 中的布尔值始终返回 True

问题描述 投票:0回答:4

这是我的示例脚本:

import ConfigParser

config = ConfigParser.ConfigParser()
config.read('conf.ini')

print bool(config.get('main', 'some_boolean'))
print bool(config.get('main', 'some_other_boolean'))

这是

conf.ini
:

[main]
some_boolean: yes
some_other_boolean: no

运行脚本时,它会打印

True
两次。为什么?它应该是
False
,因为
some_other_boolean
设置为
no

python boolean configparser
4个回答
69
投票

使用

getboolean()

print config.getboolean('main', 'some_boolean') 
print config.getboolean('main', 'some_other_boolean')

来自 Python 手册

RawConfigParser.getboolean(section, option)

一种便捷方法,将指定部分中的选项强制为布尔值。请注意,该选项可接受的值为“1”、“yes”、“true”和“on”(这会导致此方法返回 True),以及“0”、“no”、“false”和“off” ",这导致它返回 False。这些字符串值以不区分大小写的方式进行检查。任何其他值都会导致它引发 ValueError。

如:

my_bool = config.getboolean('SECTION','IDENTIFIER')

bool()
构造函数将空字符串转换为False。非空字符串为 True。
bool()
不会对“假”、“否”等做任何特别的事情

>>> bool('false')
True
>>> bool('no')
True
>>> bool('0')
True
>>> bool('')
False

2
投票

它返回字符串“no”。 bool("no") 是 True


0
投票

我遇到了同样的问题,我尝试迭代所有参数值并查看它们是否是布尔值。但是,args 是命名空间对象并且不可迭代。所以我必须获取 iterable 的实例,然后在修改为 bool 参数后,我将其恢复为名称空间对象,如下所示:

updated_args = {}
for key, value in vars(args).items():
    if isinstance(value, str) and value.lower() in ['true', 'false']:
        updated_args[key] = value.lower() == 'true'
    else:
        updated_args[key] = value

args = argparse.Namespace(**updated_args)

0
投票

一个选项可以是:

conf.ini:

[main]
some_boolean = 1
some_other_boolean = 0

脚本:

from configparser import ConfigParser


config = ConfigParser()
config.read('conf.ini')

print (bool(int(config['main']['some_boolean'])))
print (bool(int(config['main']['some_other_boolean'])))

© www.soinside.com 2019 - 2024. All rights reserved.