我不认为这是可能的,但我想自己处理来自argparse的异常.
例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help', required=True)
try:
args = parser.parse_args()
except:
do_something()
Run Code Online (Sandbox Code Playgroud)
当我运行它:
$ myapp.py
usage: myapp --foo foo
myapp: error: argument --foo is required
Run Code Online (Sandbox Code Playgroud)
但我希望它落入例外.
Ned*_*der 66
您可以子类化ArgumentParser
并覆盖该error
方法,以便在发生错误时执行不同的操作:
class ArgumentParserError(Exception): pass
class ThrowingArgumentParser(argparse.ArgumentParser):
def error(self, message):
raise ArgumentParserError(message)
parser = ThrowingArgumentParser()
parser.add_argument(...)
...
Run Code Online (Sandbox Code Playgroud)
Jac*_*CUI 18
在我的例子中,argparse打印"参数太少"然后退出.在阅读了argparse代码之后,我发现在打印一些消息后它只是调用sys.exit().因为sys.exit()除了抛出SystemExit异常之外什么都不做,你可以捕获这个异常.
所以试试看看它是否适合你.
try:
args = parser.parse_args(args)
except SystemExit:
.... your handler here ...
return
Run Code Online (Sandbox Code Playgroud)