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

26
我试图使用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 看起来被正确解析了,但是 boolean flag 总是被解析成 True,即使我在命令行参数中明确指出它应该是 False

我错在哪里了?

1个回答

41

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

>>> bool("False")
True

那行不通,因为字符串"False"是一个非空值。所有非空字符串都具有 True 布尔值。

使用 store_false 操作代替:

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

现在当你使用那个开关时,False 被存储,否则默认为 True(由 action='store_false' 设置)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接