我希望Python argparse抛出异常而不是使用

时间:2013-02-06 11:50:14

标签: 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 个答案:

答案 0 :(得分:63)

您可以继承ArgumentParser并覆盖error方法,以便在发生错误时执行不同的操作:

class ArgumentParserError(Exception): pass

class ThrowingArgumentParser(argparse.ArgumentParser):
    def error(self, message):
        raise ArgumentParserError(message)

parser = ThrowingArgumentParser()
parser.add_argument(...)
...

答案 1 :(得分:14)

就我而言,argparse打印“参数太少”然后退出。在阅读了argparse代码之后,我发现在打印一些消息后它只是调用sys.exit()。因为sys.exit()除了抛出SystemExit异常之外什么都不做,你可以捕获这个异常。

所以试试看看它是否适合你。

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