这是我的示例脚本:
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
。
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
它返回字符串“no”。 bool("no") 是 True
我遇到了同样的问题,我尝试迭代所有参数值并查看它们是否是布尔值。但是,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)
一个选项可以是:
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'])))