我想使用 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。
parsed_args.my_bool
True
cmd_line
["--my_bool", ""]
bool("")
False
如何让 argparse 解析"False","F"和它们的小写变体是False?
"False"
"F"
这实际上已经过时了。对于 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 以外的所有条目。如果您想出于任何原因尝试更改它,您可以为此创建一个自定义错误类。