2015-05-10 54 views
2

我使用可选参数argparse,但我想避免有这样的事情:script.py -a 1 -b -a 2 这里我们有两次可选参数'a',只有第二个参数是回。我想要获得这两个值或获取错误消息。 我应该如何定义参数?Python argparse:如何检测重复的可选参数?

[编辑] 这是代码:

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() 
+0

向我们展示你到目前为止的代码,否则我们并不会帮助你... –

+0

尝试https://docs.python.org/3/library/argparse。 html#nargs – dav1d

+0

我已经添加了代码。但是这个链接并没有帮助。我不想要一个选项被指定两次。目前这是发生了什么: script.py -a 1 -b 2 -a 3 --->给出a = 3和b = 2,没有错误,并且没有关于第一个参数的信息。我只是想考虑具有相同的可选参数两次的错误。 – Pendus

回答

4

append动作将收集在一个列表

parser.add_argument('-a', '--alpha', action='append') 

从重复使用时的值产生args命名空间等:

namespace(alpha=['1','3'], b='4') 

解析后您可以检查args.alpha,并接受或投诉值的数量。 parser.error('repeated -a')可用于发出argparse风格的错误消息。

你可以在一个自定义的Action类中实现类似的功能,但这需要理解这种类的基本结构和操作。我无法想象任何可以在Action中完成的任何事情,这些事情不能在后面的附加列表中完成。

https://stackoverflow.com/a/23032953/901925是一个没有重复自定义Action的答案。

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

另一个类似这样:Python argparse with nargs behaviour incorrect

相关问题