沒有在手段,以接受一系列的nargs
,只是像重視1
,2
,'+'
,'*'
。
您可以編寫一個自定義Action
類,用於檢查nargs='*'
傳遞給它的值的數量。但是我認爲在解析之後執行該測試會很容易。
我可以找到一個錯誤/問題,探討如果你真的想進入該選項,增加一個範圍nargs
選項。
如果您沒有其他定位符,您可以定義3個定位點,其中2個定位點爲?
。你甚至可以將它們組合成一個具有通用名稱和'追加'動作的列表。我會探討這一點。
In [573]: p=argparse.ArgumentParser()
In [574]: p.add_argument('str',action='append')
In [575]: p.add_argument('str',nargs='?',action='append')
In [576]: p.add_argument('str',nargs='?',action='append')
In [577]: p.print_help()
usage: ipython3 [-h] str [str] [str]
positional arguments:
str
str
str
optional arguments:
-h, --help show this help message and exit
In [578]: p.parse_args('1 2 3'.split())
Out[578]: Namespace(str=['1', '2', '3'])
In [579]: p.parse_args('1 3'.split())
Out[579]: Namespace(str=['1', '3', None])
In [580]: p.parse_args('1'.split())
Out[580]: Namespace(str=['1', None, None])
得到了default
Nones。我可以糾正這與
p.add_argument('str', nargs='?', action='append', default=argparse.SUPPRESS)
In [586]: p.parse_args('1 2'.split())
Out[586]: Namespace(str=['1', '2'])
In [588]: p.parse_args('1 2 3 4'.split())
usage: ipython3 [-h] str [str] [str]
ipython3: error: unrecognized arguments: 4
(oops,這是代碼1-3的說法,但你明白了)。
重複的答案給出了一個自定義的Action類,例如我建議的。但我不確定這是對解析後測試的改進。 – hpaulj