L'utilisation de 'argparse.ArgumentError' en Python
Je voudrais utiliser le ArgumentError
exception dans le argparse
module en Python, mais je ne peux pas comprendre comment l'utiliser. La signature est dit qu'il devrait être appelé comme ArgumentError(argument, message)
, mais je ne peux pas comprendre ce que argument
devrait être. Je pense qu'il devrait y avoir une certaine partie de l'analyseur de l'objet, mais je ne pouvais pas trouver toute la documentation pour elle.
- Connexes: Est-il mauvais pour élever
ArgumentError
à la main? - Vous pouvez l'utiliser au sein d'un
Action
classe, tout comme les classes existantes ne. Mais je ne peux pas imaginer une raison pour le faire en dehors de laparser
. Il n'est pas quelque chose de spécial - ajoute simplement lesAction
nom pour le message d'erreur. L'étude de son utilisation dans le code.
Vous devez vous connecter pour publier un commentaire.
De la documentation de la source:
La
argument
paramètre du constructeur est leAction
objet à partir de laquelle l'exception est soulevée. Habituellement, il n'est pas nécessaire pour l'élever à l'extérieur d'unAction
sous-classe, et quand il sous-classement, il n'est pas nécessaire pour l'élever de façon explicite; vous pose généralementValueError
(ou tout ce qui est approprié) à la place.Flottent des valeurs entre 0 et 1
En ce qui concerne votre commentaire, que vous ne voulez accepter les valeurs à virgule flottante compris entre 0 et 1. Pour cela, vous devez utiliser la capacité de définir des types personnalisés. Vous pouvez le faire, par exemple comme ceci:
Noter que c'est également protégé contre les non-flotte comme
float(string)
de soulever unValueError
pour les non-flotte qui déclenche également un type non valide erreur par leargparse
module.ArgumentTypeError
est juste un moyen de spécifier un message d'erreur personnalisé.Mutuellement exclusifs paramètres
Pour mutuellement exclusifs paramètres, vous devez utiliser
argparse.add_mutually_exclusive_group
.Paramètre de dépendance
Paramètre de dépendance n'est pas vraiment quelque chose qui devrait être fait par l'argument analyseur. Pour les détails sémantiques, en revanche, vous pouvez tout simplement le faire vous-même:
Vous pouvez utiliser
ArgumentParser.erreur
pour élever le message d'erreur personnalisé qui va interrompre le programme et d'impression à la console.Mais bien sûr, dans une telle situation de base, il ferait beaucoup plus de sens, juste pour implicitement deviner
-p
si possible.AttributeError: 'float' object has no attribute 'option_strings'
.-w
option nécessite la-p
option, ou-n
et-N
sont mutuellement exclusifs.Tout
parser.error()
est ce que la plupart des gens probablement le souhaitez, il est également possible d'utiliser argparse.ArgumentError() (comme la question se pose.) Vous avez besoin d'une référence à l'argument, comme lebar_arg
dans l'exemple ci-dessous:Cela entraînera une sortie comme celle ci-dessous:
ArgumentError
à l'extérieur de laparser
est possible, mais probablement inférieure à l'aide deparser.error
.args
). Mais honnêtement, je pense queparser.error()
doit inclure le nom de la délinquance commutateur par défaut.