为什么argparse没有正确解析我的布尔标志?

时间:2017-01-14 22:52:58

标签: python

我正在尝试使用argparse模块使我的Python程序接受灵活的命令行参数。我想传递一个简单的布尔标志,并说TrueFalse在我的代码中执行适当的分支。

请考虑以下事项。

import argparse

parser = argparse.ArgumentParser(prog='test.py',formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-boolflag', type=bool, default=True)
parser.add_argument('-intflag' , type=int, default=3)
args = parser.parse_args()

boolflag = args.boolflag
intflag  = args.intflag


print ("Bool Flag is ", boolflag)
print ("Int Flag is ",  intflag)

当我尝试用python scrap.py -boolflag False -intflag 314执行它时,我得到了结果

Bool Flag is  True
Int Flag is  314

这是为什么?!! intflag似乎被正确解析,但是布尔标志总是被解析为True,即使我在命令行参数中明确提到我希望它是False

我哪里错了?

1 个答案:

答案 0 :(得分:14)

您正在尝试将字符串"False"转换为布尔值:

>>> bool("False")
True

由于字符串"False"是非空值,因此无法正常工作。 所有非空字符串都有True布尔值。

改为使用store_false action

parser.add_argument('--disable-feature', dest='feature', 
                    action='store_false')

现在,当您使用该切换时,会存储False,否则默认值为True(由action='store_false'设置)。