Argparse:使用argparse.ArgumentTypeError

时间:2016-06-02 14:41:50

标签: python argparse

每当用户没有为我的脚本中的参数提供合适的参数时,我会使用我提供的错误字符串引发argparse.ArgumentTypeError。我的问题是argparse还会打印用法,而告诉用户当他的参数出错时如何使用我的脚本似乎无关紧要。

是否有某种方法可以引发argparse.ArgumentTypeError以抑制使用情况打印输出?我需要使用自定义使用功能吗?或者我可能根本不应该使用这个例外?

1 个答案:

答案 0 :(得分:0)

你在哪里抚养ArgumentTypeError?在type函数中?

ArgumentTypeError的定义仅为pass;除了子类Exception之外,它没有做任何事情。

_get_value中引用它,它在您的参数字符串上调用type函数。该方法以同样的方式处理TypeErrorValueError。它将错误重新修改为ArgumentError,它将参数dest(名称)添加到消息中。 parse_known_args最终将其转换为对parser.error的调用。

添加parser.error的{​​{1}}方法。

因此,简单地更改该方法可能是您问题的解决方案。

https://docs.python.org/3/library/argparse.html#exiting-methods

我不确定如果您的print_usage函数返回其他错误会发生什么 - 它可能会一直冒泡到顶部。

更改type方法的正式方法是继承parser.error,但您可以通过以下方式进行一次更改:

ArgumentParser

这只是显示了消息,并没有退出。如果我更接近原版,它也会退出。