每当用户没有为我的脚本中的参数提供合适的参数时,我就会用我提供的错误字符串引发argparse.ArgumentTypeError。我的问题是,argparse也会打印用法,而当用户刚刚得到一个错误的参数时,告诉用户如何使用我的脚本对我来说似乎无关紧要。
对于某些提高argparse.ArgumentTypeError的情况,有没有一种方法来抑制用法打印输出?我需要使用自定义使用函数吗?或者我根本不应该使用这个异常?
发布于 2016-06-03 00:04:49
你在哪里提高ArgumentTypeError?在type函数中?
ArgumentTypeError的定义就是pass;除了Exception子类之外,它不做任何事情。
它在_get_value中被引用,它对参数字符串调用type函数。该方法以相同的方式处理TypeError和ValueError。它将错误重新转换为名称,这将向消息中添加参数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的子类,但是您可以使用以下命令来完成一次更改:
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)这只是显示了消息,并没有退出。如果我更接近原始版本,它也会退出。
https://stackoverflow.com/questions/37595025
复制相似问题