我想使用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
什么?
另一个解决方案使用了先前的建议,但存在来自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>
并仍使用默认值(特定于用户设置)。这种方法的一个(间接相关的)缺点是“水罐”可能会引起位置争执
问题内容: 我想使用argparse解析布尔命令行参数,写为。例如: 但是,以下测试代码不能满足我的要求: 可悲的是,计算结果为True。即使我更改为,情况也是如此,这令人惊讶,因为评估为。 如何获取进行解析,以及它们的小写字母形式是什么? 问题答案: 另一个解决方案使用了先前的建议,但存在来自以下情况的“正确”解析错误: 这对于使用默认值进行切换非常有用。例如 允许我使用:
我想使用argparse解析写为“--foo true”或“--foo false”的布尔命令行参数。例如: 但是,下面的测试代码并没有做我想做的事情: 遗憾的是,的计算结果为。即使我将更改为时也是如此,这是令人惊讶的,因为的计算结果为。 如何使argparse将、及其小写变体解析为?
我试图获得以下行为: python test.py= 当我使用 但是,如果我添加,试图强制强制强制转换为布尔值,它就会中断。在这种情况下 实际上最终存储。怎么回事??
我注意到java有一个问题。它不能解析空值的布尔类。我知道它有静态方法,但它的签名声明它只接受,而不接受。 换句话说,它有以下签名: 但不是: 检查布尔值而不陷入NullPointerException的最佳方法是什么?
我正在尝试使用argparse模块使我的Python程序接受灵活的命令行参数。我想传递一个简单的布尔标志,并说或来执行代码中的相应分支。 请考虑以下内容。 这是为什么?!!intflag似乎解析正确,但布尔标志总是解析为,即使我在命令行参数中明确提到我希望它是。 我哪里错了?
假设我期望一个列表列表,其中内部列表具有不同的类型和长度,例如。G 如何使用argparse解析上述列表? 关于stackoverflow最有用的问题: 类似的问题也存在,最有用的问题在这里。但是在我的例子中,它们还不够好,因为它们忽略了列表嵌套了不同的数据类型和长度的事实。