我试图使用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
布尔值.
请改为使用store_false
操作:
parser.add_argument('--disable-feature', dest='feature', action='store_false')
现在当你使用那个开关时,False
存储,否则默认是True
(设置action='store_false'
).