Python-用argparse解析布尔值

发布于 2021-02-02 23:08:54

我想使用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什么?

关注者
0
被浏览
105
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    另一个解决方案使用了先前的建议,但存在来自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>
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看