、ちょうど1
、2
、'+'
、'*'
ような値。
が渡す値の数をチェックするカスタムAction
クラスを書くことができます。しかし、私は解析した後にそのテストを実行するのと同じくらい簡単だと思います。
本当にそのことを知りたい場合は、範囲nargs
を追加することを検討するバグや問題が見つかりました。
あなたが他のポジションを持っていなかった場合は、3ポジションを定義することができます.2つは?
です。共通名と「追加」アクションを使用してそれらを1つのリストに結合することさえできます。私はそれを探検します。
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])
Not 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
で(おっと、これは1-3引数にコーディングされているが、あなたのアイデアを得る)ことを修正することができます。
その複製の答えは私が提案したようなカスタムのActionクラスを与えます。しかし、それはポスト・パース・テストよりも改善されているとは思えません。 – hpaulj