擅长:python、mysql、java
<p>简要描述一下<code>argparse</code>解析的工作原理可能会有所帮助</p>
<p>值收集在<code>namespace</code>对象中。解析开始时,<code>default</code>值都放在<code>namespace</code>中。然后,当在用户输入中遇到参数时,将按照<code>add_argument</code>中的指定以及<code>namespace</code>中的值对其进行解析,并覆盖默认值</p>
<p>当看到标记时,会解析标记的参数,例如“foobar”,但需要像您这样的位置,并采用<code>nargs</code>指定的字符串的确切数目。在这种情况下,它将使用2个字符串。因此,对于这个定义,<code>default</code>参数是无用的</p>
<p>对于<code>nargs='*'</code>,任何数量的字符串都满足它。0字符串的大小写得到特殊处理,并将默认值放在<code>namespace</code>中</p>
<p>在优雅中没有关于在解析后添加检查的内容。可以通过以下方式简化错误消息:</p>
<pre><code>if len(a.myargs) != 2:
parser.error('Incorrect number of arguments')
</code></pre>
<p>像<code>optparse</code>这样的旧解析器处理所有标记的参数,并在<code>extras</code>中返回其余参数供您处理<code>argparse</code>处理那些<code>extras</code>。使用固定的<code>nargs</code>处理位置是最简单的。一个带有变量<code>nargs</code>的位置变量通常可以正常工作,但很难使用多个。如果您使用<code>*</code>指定了两个操作,那么解析器应该如何分配字符串</p>
<p>是的,您可以定义自定义的<code>Action</code>类来处理特殊情况,但结果通常不如简单的解析后检查优雅(IMO)。我不会因为聪明而加分:)</p>