我想使用 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
。 This is the case even when I change cmd_line
to be ["--my_bool", ""]
, which is surprising, since bool("")
evalutates to False
.
如何让 argparse 解析 "False"
, "F"
,它们的小写变体是 False
?
原文由 SuperElectric 发布,翻译遵循 CC BY-SA 4.0 许可协议
这实际上已经过时了。对于 Python 3.7+, Argparse 现在支持布尔参数(搜索 BooleanOptionalAction)。
实现如下所示:
另一件要提的事情:这将通过 argparse.ArgumentTypeError 阻止参数的 True 和 False 以外的所有条目。如果您想出于任何原因尝试更改它,您可以为此创建一个自定义错误类。