我想使用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
?
我认为更规范的方法是通过:
command --feature
而且
command --no-feature
argparse
很好地支持此版本:
parser.add_argument('--feature', dest='feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)
当然,如果您确实想要--arg
版本,您可以将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?
另一种解决方案使用了前面的建议,但带有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>
并且仍然使用默认值(特定于用户设置)。这种方法的一个(间接相关的)缺点是,'nargs'可能会捕获位置参数--请参阅这个相关问题和这个argparse bug报告。
问题内容: 我想使用argparse解析布尔命令行参数,写为“ –foo True”或“ –foo False”。例如: 但是,以下测试代码无法满足我的要求: 可悲的是,计算结果为。即使我更改为,情况也是如此,这令人惊讶,因为评估为。 如何获取argparse进行解析,以及它们的小写字母形式是什么? 问题答案: 另一个解决方案使用了先前的建议,但存在来自以下情况的“正确”解析错误: 这对于使用默认
问题内容: 我想使用argparse解析布尔命令行参数,写为。例如: 但是,以下测试代码不能满足我的要求: 可悲的是,计算结果为True。即使我更改为,情况也是如此,这令人惊讶,因为评估为。 如何获取进行解析,以及它们的小写字母形式是什么? 问题答案: 另一个解决方案使用了先前的建议,但存在来自以下情况的“正确”解析错误: 这对于使用默认值进行切换非常有用。例如 允许我使用:
我试图获得以下行为: python test.py= 当我使用 但是,如果我添加,试图强制强制强制转换为布尔值,它就会中断。在这种情况下 实际上最终存储。怎么回事??
我正在尝试使用argparse模块使我的Python程序接受灵活的命令行参数。我想传递一个简单的布尔标志,并说或来执行代码中的相应分支。 请考虑以下内容。 这是为什么?!!intflag似乎解析正确,但布尔标志总是解析为,即使我在命令行参数中明确提到我希望它是。 我哪里错了?
我注意到java有一个问题。它不能解析空值的布尔类。我知道它有静态方法,但它的签名声明它只接受,而不接受。 换句话说,它有以下签名: 但不是: 检查布尔值而不陷入NullPointerException的最佳方法是什么?
1. 简介 分布分析报告可以帮助您查看事件在不同区间的发生频次,从而判断用户的使用习惯和活跃情况。除了次数,您还能够查看其它事件指标的用户数量分布。 分布分析能够帮助您洞察这些问题: · 对比不同来源渠道的用户在站点的行为次数分布,如浏览页面1-3次,3-10次,10次以上,不同区间的用户数量有多少 · 上周推广活动客单价的人数分布情况 · 改版后,用户的每日启动次数是否增加 2. 使用说明 2.