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>

以上是 Python-用argparse解析布尔值 的全部内容, 来源链接: utcz.com/qa/428351.html

回到顶部