Python-用argparse解析布尔值
我想使用argparse解析布尔命令行参数,写为“ --foo True”或“ --foo False”
。例如:
my_program --my_boolean_flag False
但是,以下测试代码不能满足我的要求:
import argparse
parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)
cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse(cmd_line)
可悲的是,parsed_args.my_bool
计算结果为True。即使我更改cmd_line
为["--my_bool", ""]
,情况也是如此,这令人惊讶,因为bool("")
评估为False
。
如何获取argparse
进行解析"False"
,"F"
以及它们的小写字母形式是False
什么?
-
另一个解决方案使用了先前的建议,但存在来自
argparse
以下情况的“正确”解析错误: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.')
这对于使用默认值进行切换非常有用。例如
parser.add_argument("--nice", type=str2bool, nargs='?', const=True, default=False, help="Activate nice mode.")
允许我使用:
script --nice script --nice <bool>