Je ne pense pas que ce soit possible, mais je veux gérer moi-même les exceptions de l'argparse.
Par exemple:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help', required=True)
try:
args = parser.parse_args()
except:
do_something()
Quand je l'exécute:
$ myapp.py
usage: myapp --foo foo
myapp: error: argument --foo is required
Mais je veux plutôt qu'il tombe dans l'exception.
Vous pouvez sous-classer ArgumentParser
et remplacer la méthode error
pour faire quelque chose de différent en cas d'erreur:
class ArgumentParserError(Exception): pass
class ThrowingArgumentParser(argparse.ArgumentParser):
def error(self, message):
raise ArgumentParserError(message)
parser = ThrowingArgumentParser()
parser.add_argument(...)
...
dans mon cas, argparse affiche "trop peu d'arguments" puis quitte. après avoir lu le code argparse, j'ai trouvé qu'il appelle simplement sys.exit () après avoir imprimé un message. comme sys.exit () ne fait que lancer une exception SystemExit, vous pouvez simplement capturer cette exception.
essayez donc ceci pour voir si cela fonctionne pour vous.
try:
args = parser.parse_args(args)
except SystemExit:
.... your handler here ...
return