当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么argparse没有正确解析我的布尔标志?》经验,为你挑选了1个好方法。

我试图使用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> Martijn Piet..:

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

>>> bool("False")
True

这不起作用,因为字符串"False"是非空值.所有非空字符串都有一个True布尔值.

请改为使用store_false操作:

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

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

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有