如果传递了 -h 参数,为什么我的脚本会在 parse_args() 处停止?

Why does my script stop at parse_args() if -h argument is passed?

我尝试 运行 以下脚本来了解 command.parse_args() 返回的名称空间中的内容。

#!/usr/bin/python3                                 

import argparse

command = argparse.ArgumentParser()
command.add_argument("test")

print("test1")
args = command.parse_args()
print("test2")
print(args)

如果我 运行 一个 "complete" 命令(如 ./test.py 1)一切正常并且显示命名空间。

但是如果我做类似 ./test.py -h 的事情,它会失败并停止在 args = command.parse_args()print("Test2") 不会被调用。

我没有发现任何错误。但是脚本的其余部分没有被解释。

为什么?

这种方式有什么错误吗?

./test.py -h 是否由于某种原因无效(即使它看起来工作正常)?

args = command.parse_args() 会导致脚本结束前退出吗?

默认情况下,help options are added 到参数解析器。然后,当传递帮助参数时,调用帮助操作打印帮助,然后结束程序执行。

如果您不希望这种情况发生,您需要将 add_help 参数设置为 False,但这也会阻止参数解析器提供帮助功能。

如果您实际查看打印的帮助文本,退出行为非常明显:

-h, --help  show this help message and exit

查看 argparse.py 源代码。

https://github.com/python/cpython/blob/master/Lib/argparse.py#L1007

argparse 有默认的帮助-h,这是一个显示帮助和退出的动作。

_HelpAction.__call__处理这个动作。