我想使用 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)
Sadly, parsed_args.my_bool
评估为True
。即使我改变了也是如此cmd_line
to be ["--my_bool", ""]
,这是令人惊讶的,因为bool("")
评估为False
.
如何让 argparse 进行解析"False"
, "F"
,以及它们的小写变体是False
?
我认为更规范的方法是通过:
command --feature
and
command --no-feature
argparse
很好地支持这个版本:
Python 3.9+ https://docs.python.org/3/library/argparse.html#action:
parser.add_argument('--feature', action=argparse.BooleanOptionalAction)
Python
parser.add_argument('--feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)
当然,如果你真的想要--arg <True|False>
版本,你可以通过ast.literal_eval
作为“类型”,或用户定义的函数......
def t_or_f(arg):
ua = str(arg).upper()
if 'TRUE'.startswith(ua):
return True
elif 'FALSE'.startswith(ua):
return False
else:
pass #error condition maybe?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)