Python-用argparse解析布尔值
我想使用argparse解析布尔命令行参数,写为“ --foo True”或“ --foo False”
。例如:
my_program --my_boolean_flag False
但是,以下测试代码不能满足我的要求:
import argparseparser = 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 --nicescript --nice <bool>
以上是 Python-用argparse解析布尔值 的全部内容, 来源链接: utcz.com/qa/428351.html