これは可能ではないと思いますが、自分自身で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