为啥 argparse 不能正确解析我的布尔标志? [复制]
Posted
技术标签:
【中文标题】为啥 argparse 不能正确解析我的布尔标志? [复制]【英文标题】:Why is argparse not parsing my boolean flag correctly? [duplicate]为什么 argparse 不能正确解析我的布尔标志? [复制] 【发布时间】:2017-05-30 01:58:03 【问题描述】:我正在尝试使用 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
。
我哪里错了?
【问题讨论】:
【参考方案1】:您正在尝试将字符串 "False"
转换为布尔值:
>>> bool("False")
True
这行不通,因为字符串"False"
是一个非空值。 所有非空字符串都有一个True
布尔值。
改用store_false
action:
parser.add_argument('--disable-feature', dest='feature',
action='store_false')
现在,当您使用该开关时,将存储False
,否则默认为True
(由action='store_false'
设置)。
【讨论】:
以上是关于为啥 argparse 不能正确解析我的布尔标志? [复制]的主要内容,如果未能解决你的问题,请参考以下文章