使用argparse传递bool型参数

在使用 argparse 传递bool型参数的时候发现无论传入True还是False,参数变量最后都是True。

1
2
parser.add_argument("--cpu", type = bool, default = True, 
help = "cpu only")

查资料后才发先 argparse 支持对bool型的直接传参,需要用别的方法处理一下。

解决方法1:采用action传递bool型

1
2
parser.add_argument("--cpu", action= "store_true", 
help = "cpu only")

采用action方法的特点就是传参时输入 --cpu 则为True,不输入则为False

1
2
python test.py --cpu # cpu项为True
python test.py # cpu项为False

解决方法2:采用转换函数传递bool型

此方法是从网上看到的。通过写一个转换函数,使命令行传入的 string 型转化为 bool 型:

1
2
3
4
5
6
7
8
9
def str2bool(v):
if isinstance(v, bool):
return v
if v.lower() in ('yes', 'true', 't', 'y', '1'):
return True
elif v.lower() in ('no', 'false', 'f', 'n', '0'):
return False
else:
raise argparse.ArgumentTypeError('Boolean value expected.')

这时只要

1
2
parser.add_argument("--cpu", type = str2bool, default = True, 
help = "cpu only")

就可以正常传递bool型了。