问题描述
argparse无法识别布尔型参数,参数传进来时,默认为字符串。字符串强制转布尔型时为True。因此,在我们想要传入布尔类型的参数时,需要用一定的方法对参数进行一些处理。处理方法如下所示。
解决方案
1 action=‘store_true’,传入参数为True,不传为False
例子如参考链接中所示。
parser.add_argument("--isOverwrite1", action='store_true',help="Overwrite",required=False)
2 自定义函数type=lambda x: x.lower() == ‘true’,做判断
例子如参考链接中所示。
parser.add_argument("--isOverwrite2",help="Overwrite", type=lambda x: x.lower() == 'true', required=False)
3 专门写一个函数处理布尔值
举例如下:
import argparse
parser.add_argument('--replay', type=str)
# 定义一个转换函数
def str2bool(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.')
replay = str2bool(args.replay)
args.replay = str2bool(args.replay)
这种方法的好处是,可以很方便的处理所有布尔类型的变量,不用担心用户因对布尔类型变量的表示不同造成的参数误传错误。