我希望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

但我希望它变成例外。

当发生错误时,您可以将ArgumentParser子类化并覆盖error方法以执行不同的操作:

class ArgumentParserError(Exception): pass
class ThrowingArgumentParser(argparse.ArgumentParser):
    def error(self, message):
        raise ArgumentParserError(message)
parser = ThrowingArgumentParser()
parser.add_argument(...)
...

在我的例子中,argparse打印"参数太少",然后退出。在阅读了argparse代码后,我发现它只是在打印一些消息后调用sys.exit()。由于sys.exit()除了抛出SystemExit异常之外什么都不做,所以您可以捕获此异常。

所以试试这个,看看它是否适合你。

    try:
        args = parser.parse_args(args)
    except SystemExit:
        .... your handler here ...
        return

相关内容

  • 没有找到相关文章

最新更新