Je voudrais utiliser le ArgumentError
sauf dans le argparse
module Python, mais je ne peux pas comprendre comment l'utiliser. La signature indique qu'elle devrait être appelée ArgumentError(argument, message)
, mais je ne peux pas comprendre ce que devrait être argument
Je pense que cela devrait faire partie de l'objet de l'analyseur, mais je n'ai trouvé aucune documentation à ce sujet.
Réponse
Trop de publicités?
ukrutt
Points
1770
Alors que parser.error()
est probablement ce que la plupart des gens veulent, il est également possible d'utiliser argparse.ArgumentError() (comme le demande la question.) Vous avez besoin d'une référence à l'argument, comme le bar_arg
dans l'exemple ci-dessous :
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
bar_arg = parser.add_argument('--bar')
args = parser.parse_args()
if args.bar == 'xyzzy':
raise argparse.ArgumentError(bar_arg, "Can't be 'xyzzy'")
if args.foo == 'xyzzy':
parser.error("Can't be 'xyzzy'")
Cela se traduira par une sortie comme celle ci-dessous :
$ python argparse_test.py --foo xyzzy
usage: argparse_test.py [-h] [--foo FOO] [--bar BAR]
argparse_test.py: error: Can't be 'xyzzy'
$ python argparse_test.py --bar xyzzy
Traceback (most recent call last):
File "argparse_test.py", line 10, in <module>
raise argparse.ArgumentError(bar_arg, "Can't be 'xyzzy'")
argparse.ArgumentError: argument --bar: Can't be 'xyzzy'