我想使用argparse解析布尔命令行参数,写为“ --foo True”或“ --foo False”。例如:
“ --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
cmd_line
["--my_bool", ""]
bool("")
False
如何获取argparse进行解析"False","F"以及它们的小写字母形式是False什么?
argparse
"False"
"F"
另一个解决方案使用了先前的建议,但存在来自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>