我最多只能接受两个参数,如果缺少一个则选择默认值

问题描述 投票:-1回答:1

我正在使用argparse解析我的Python程序的参数,我希望格式如下:

argparse

此参数不应再有其他值,但只能是一个。因此最多两个值。

我还想为第一个值program --arg1 val1 val2提供默认值,以便在缺少该值时使用默认值。

例如,这些命令应该可以正常工作:

val1

这些命令将产生错误:

program --arg1 a b
# val1 = a
# val2 = b

program --arg1 a
# val1 = DEFAULT
# val2 = a

为此,库中提供了两个参数program --arg1 program --arg1 a b c nargs

default支持nargsN+*?。但是这些都不对我有用,因为argparse.REMAINDER期望恰好有N个参数,如果我只给它一个,N就会抛出错误。其余的都不满足要求。

[nargs=2自变量仅适用于default等于nargs?的位置自变量。我该如何实现?

python python-3.x argparse
1个回答
0
投票

*并不支持所有可能的约定。最简单的操作是使用argparse,并对结果值进行后处理。

nargs='+'

注意,仅当完全不指定p = ArgumentParser() p.add_argument("--arg1", nargs='+') args = p.parse_args() if args.arg1 is not None: if len(args.arg1) == 1: val1 = DEFAULT val2 = args.arg1[0] elif len(args.arg1) == 2: val1, val1 = args.arg1 else: raise ArgumentTypeError("--arg1 requires 1 or 2 arguments") 时,才使用defaultadd_argument参数。在上面,我假设默认值为--arg1;如果需要,请调整None的检查。

我建议您自己解析一个参数,例如使用逗号或冒号将两个值分开。

args.arg1

或如果不使用def one_or_two(s): values = s.split(",") # or s.split(":"), etc if len(values) == 1: values.insert(0, "DEFAULT") return values[:2] p.add_argument("--arg1", type=one_or_two) args = p.parse_args() if args.arg1 is not None: val1, val2 = args.arg1 ,则完全使用第二个选项。

--arg1
© www.soinside.com 2019 - 2024. All rights reserved.