我希望Python argparse抛出异常而不是用法提示
我觉得这可能不太行,但我想自己处理argparse中的异常。
比如说:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help', required=True)
try:
args = parser.parse_args()
except:
do_something()
当我运行这个代码的时候:
$ myapp.py
usage: myapp --foo foo
myapp: error: argument --foo is required
但我希望它能进入异常处理的部分。
2 个回答
27
在我的情况下,argparse会打印“参数太少”然后退出。看了argparse的代码后,我发现它在打印一些信息后只是简单地调用了sys.exit()。其实,sys.exit()只是抛出一个SystemExit异常,所以你可以捕获这个异常。
所以试试这个方法,看看对你是否有效。
try:
args = parser.parse_args(args)
except SystemExit:
.... your handler here ...
return
82
你可以创建一个新的类,继承自 ArgumentParser
,并重写它的 error
方法,这样在出现错误时就可以做一些不同的处理:
class ArgumentParserError(Exception): pass
class ThrowingArgumentParser(argparse.ArgumentParser):
def error(self, message):
raise ArgumentParserError(message)
parser = ThrowingArgumentParser()
parser.add_argument(...)
...