Python argparse:如何检测重复的可选参数?

Pen*_*dus 4 python optional argparse

我正在使用argparse和可选参数,但我想避免这样的事情:script.py -a 1 -b -a 2这里我们有两倍可选参数'a',只返回第二个参数.我想要获得两个值或获取错误消息.我应该如何定义论证?

[编辑]这是代码:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-a', dest='alpha', action='store', nargs='?')
parser.add_argument('-b', dest='beta', action='store', nargs='?')

params, undefParams = self.parser.parse_known_args()
Run Code Online (Sandbox Code Playgroud)

hpa*_*ulj 6

append action将从列表中重复使用中收集值

parser.add_argument('-a', '--alpha', action='append')
Run Code Online (Sandbox Code Playgroud)

产生一个args名称空间

namespace(alpha=['1','3'], b='4')
Run Code Online (Sandbox Code Playgroud)

解析后,您可以检查args.alpha,接受或抱怨值的数量. parser.error('repeated -a')可用于发出argparse样式错误消息.

您可以在自定义Action类中实现类似的功能,但这需要了解此类的基本结构和操作.我想不出任何可以在一个Action中完成的事情,不能在后面的列表中完成.

/sf/answers/1612306741/是一个无重复自定义的答案Action.

你为什么使用这样nargs='?'的标记参数?如果没有const参数,这几乎是无用的(请参阅nargs=?文档中的部分).

另一个类似的SO:Python argparse与nargs行为不正确