argparse的错误类型.ArgumentParser为缺少必需的参数而引发



我需要确保在给定以下条件的情况下使用pytest引发错误:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-x', required=True)
parser.parse_args()

调用时不将某些内容传递给-x标志,将导致:

usage: my_script.py [-h] -x X
my_script.py: error: the following arguments are required: -x

如果我故意试图创建一个模棱两可的类型错误,我可能无法想出更好的错误。我需要指定一些要检查的错误类型,如下所示:

with pytest.raises(SomeError):
test_condition()

即使在tryexcept块中包装东西也不起作用,到目前为止,我尝试了KeyErrorValueErrorSystemErrorSystemExitargparse.ArgumentErrorKeyErrorException。。。似乎什么都不起作用。

默认情况下,argparse不会抛出异常,但会在发生错误时退出。自python 3.9以来,有一个exit_on_error参数,但它只在类型检查失败时引发异常。它仍然以未知的参数退出。

不改变程序行为的更好方法是检查对sys.exit:的调用

>>> import argparse, mock
>>> parser = argparse.ArgumentParser()
>>> with mock.patch("sys.exit") as m:
...     parser.parse_args(("bad", "argument"))
...     print("sys.exit call count: %d" % m.call_count)
... 
usage: [-h]
: error: unrecognized arguments: bad argument
Namespace()
sys.exit call count: 1

相关内容

  • 没有找到相关文章

最新更新