1. 问题描述:在进行命令行参数值获取时发现,若是将parser.add_argument中的type赋值为bool,那么命令行附参无论是false还是true,parse处都会变为true,举例:
#代码段
parser = argparse.ArgumentParser(description="Transmit setting")
parser.add_argument("-s", type=bool)
print(parser.parse_args())
###################情况1########################
#命令行
python 脚本.py -s False
#输出
Namespace(s=True)
###################情况2########################
#命令行
python 脚本.py -s True
#输出
Namespace(s=True)
2.原因分析:因为parser在读取命令行参数得时候获取到的都为str类型,也就是说,我们在进行-s True 或者-s False操作时,首先传入parser中的不是bool类型,而是str类型的“True”与“False”。随后parser才会将str类型转换为bool类型,但是str转变bool时,只要str不为空,bool值定为True。所以当设定type=bool时,无论传参为什么,最终解析到的参数都为True。
3.解决方法: 将type=bool改为type=str,并在脚本中使用字符串形式的“True”与“False”。
#代码段
parser = argparse.ArgumentParser(description="Transmit setting")
parser.add_argument("-s", type=str)
print(parser.parse_args())
###################情况1########################
#命令行
python 脚本.py -s False
#输出
Namespace(s='False')
###################情况2########################
#命令行
python 脚本.py -s True
#输出
Namespace(s='True')
参考:python parser.add_argument 之坑 bool_parser.add_argument bool-CSDN博客