小编典典

使用 argparse 解析布尔值

all

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


阅读 229

收藏
2022-03-01

共1个答案

小编典典

这实际上已经过时了。对于 Python 3.7+,Argparse
现在支持布尔参数
(搜索
BooleanOptionalAction)。

实现如下所示:

import argparse

ap = argparse.ArgumentParser()

# List of args
ap.add_argument('--foo', default=True, type=bool, help='Some helpful text that is not bar. Default = True')

# Importable object
args = ap.parse_args()

另一件要提的事情:这将通过 argparse.ArgumentTypeError 阻止参数的 True 和 False
以外的所有条目。如果您想出于任何原因尝试更改它,您可以为此创建一个自定义错误类。

2022-03-01