Python 为什么argparse不能正确解析我的布尔标志?

Python 为什么argparse不能正确解析我的布尔标志?,python,Python,我试图使用argparse模块使Python程序接受灵活的命令行参数。我想传递一个简单的布尔标志,并说True或False,以执行代码中的相应分支 考虑以下几点 import argparse parser = argparse.ArgumentParser(prog='test.py',formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('-boolflag', type=bool, defa

我试图使用argparse模块使Python程序接受灵活的命令行参数。我想传递一个简单的布尔标志,并说
True
False
,以执行代码中的相应分支

考虑以下几点

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


我哪里做错了

您试图将字符串
“False”
转换为布尔值:

>>> bool("False")
True
这将不起作用,因为字符串
“False”
是非空值。所有非空字符串都有一个
True
布尔值

请改为使用:

现在,当您使用该开关时,将存储
False
,否则默认值为
True
(由
action='store\u False'
设置)

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