<p>互斥组机制仅适用于简单(平面)互斥或组。没有任何机制可以将一个组嵌套到另一个组中,或者应用其他逻辑(<code>and</code>,<code>any</code>等)。</p>
<p>解析后需要自己做测试。只要默认值是合理的(例如,默认值<code>None</code>)就不难。</p>
<p>子类提供了另一种分组逻辑,这可能对您有用。</p>
<p>如果您需要更详细地研究它,这在其他SO问题和Python bug/问题中已经提出。</p>
<p>一、二、二、三</p>
<p><code>argument groups</code>尽管有名称,但不能与互斥组一起使用。它们的目的完全不同(帮助行的分组)。你可以将一个相互排斥的组嵌套在另一个组中,但最终的效果是将所有内容放在一个组中。</p>
<p><a href="https://stackoverflow.com/questions/35369448/argparse-some-mutually-exclusive-arguments-in-required-group">argparse: some mutually exclusive arguments in required group</a></p>
<p>一、二、二、三、三</p>
<pre><code>import argparse
usage = '%(prog)s [A | [B ? C]]'
parser = argparse.ArgumentParser(usage=usage)
parser.add_argument('-a')
parser.add_argument('-b')
parser.add_argument('-c')
args=parser.parse_args()
print(args)
if args.a is not None:
if not(args.b is None and args.c is None):
parser.error('Cannot use b or c with a')
</code></pre>
<p>有结果的运行</p>
<pre><code>1722:~/mypy$ python3 stack37311550.py -a 1
Namespace(a='1', b=None, c=None)
1726:~/mypy$ python3 stack37311550.py -a 1 -b2
Namespace(a='1', b='2', c=None)
usage: stack37311550.py [A | [B ? C]]
stack37311550.py: error: Cannot use b or c with a
1726:~/mypy$ python3 stack37311550.py -c3 -b2
Namespace(a=None, b='2', c='3')
1726:~/mypy$ python3 stack37311550.py -c3 -b2 -a1
Namespace(a='1', b='2', c='3')
usage: stack37311550.py [A | [B ? C]]
stack37311550.py: error: Cannot use b or c with a
</code></pre>