擅长:python、mysql、java
<p>打印帮助后,退出程序是默认操作:</p>
<pre><code>class _HelpAction(Action):
<...>
def __call__(self, parser, namespace, values, option_string=None):
parser.print_help()
parser.exit()
class ArgumentParser(_AttributeHolder, _ActionsContainer):
<...>
def exit(self, status=0, message=None):
if message:
self._print_message(message, _sys.stderr)
_sys.exit(status)
</code></pre>
<p><code>exit()</code>也是从<code>ArgumentParser.error()</code>调用的,例如,当看到未识别的参数时调用</p>
<p><strong>因此,您可以通过替换解析器的<code>exit()</code></strong>来改变这种行为。您不希望重写<code>_HelpAction</code>的逻辑,因为您确实希望解析器在打印帮助或看到错误后结束其工作并将控制返回到控制台循环(而不是命令执行代码)。例如,提出一些具体的例外情况</p>
<p><strong>或者,您可以在控制台循环中捕获<code>SystemExit</code>,并将其视为命令结束</p>