首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Argparse:在使用argparse.ArgumentTypeError时隐藏用法

Argparse:在使用argparse.ArgumentTypeError时隐藏用法
EN

Stack Overflow用户
提问于 2016-06-02 22:41:50
回答 1查看 796关注 0票数 0

每当用户没有为我的脚本中的参数提供合适的参数时,我就会用我提供的错误字符串引发argparse.ArgumentTypeError。我的问题是,argparse也会打印用法,而当用户刚刚得到一个错误的参数时,告诉用户如何使用我的脚本对我来说似乎无关紧要。

对于某些提高argparse.ArgumentTypeError的情况,有没有一种方法来抑制用法打印输出?我需要使用自定义使用函数吗?或者我根本不应该使用这个异常?

EN

回答 1

Stack Overflow用户

发布于 2016-06-03 00:04:49

你在哪里提高ArgumentTypeError?在type函数中?

ArgumentTypeError的定义就是pass;除了Exception子类之外,它不做任何事情。

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

添加print_usage的是parser.error方法。

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

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

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

更改parser.error方法的正式方法是创建ArgumentParser的子类,但是您可以使用以下命令来完成一次更改:

代码语言:javascript
复制
In [269]: parser=argparse.ArgumentParser()

In [270]: def myerror(message):
   .....:     print(message)

In [271]: parser.error=myerror

In [272]: parser.add_argument('foo')
Out[272]: _StoreAction(option_strings=[], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)

In [273]: parser.parse_args([])
the following arguments are required: foo
Out[273]: Namespace(foo=None)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37595025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档