Bonjour, j'utilise argparse pour essayer de générer un rapport trimestriel. Voici à quoi ressemble le code:
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", action='store_true', type=int, help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", action='store_true',type=str,help="Enter a year in the format YYYY ")
args = parser.parse_args()
l'erreur que je reçois est:
TypeError: init () a obtenu un argument de mot clé inattendu 'type'
autant que je sache du type de documentation argparse est l'un des paramètres de la fonction add_argument. J'ai essayé de supprimer cela et de mettre à jour le code pour:
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", action='store_true', help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", action='store_true',help="Enter a year in the format YYYY ")
args = parser.parse_args()
J'ai ensuite essayé de l'exécuter avec: python scriptname.py -q 1 -y 2015
et cela me donne l'erreur suivante:
erreur: arguments non reconnus: 1 2015
Je ne sais pas non plus pourquoi. Quelqu'un peut-il nous éclairer à ce sujet?.
Quelle action="store_true"
signifie que si l'argument est donné sur la ligne de commande, une valeur True
doit être stockée dans l'analyseur. Ce que vous voulez réellement, c'est stocker l'année donnée (sous forme de chaîne) et le trimestre (sous forme d'int).
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", type=int, help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", type=str, help="Enter a year in the format YYYY ")
args = parser.parse_args()
Lorsque vous spécifiez action='store_true
argparse instancie en interne un _StoreAction
instance dont le constructeur n'accepte pas un paramètre type
(car ce sera toujours un booléen (True/False)). Vous ne pouvez pas fournir action="store_true"
et 'type' en même temps.
La documentation argparse
n'est pas aussi détaillée qu'elle pourrait l'être (mais contient toujours plus d'informations que de nombreux utilisateurs peuvent en absorber).
En particulier, les informations réelles dont un argument a besoin varient avec action
.
parser.add_argument('-q', "--quarter", action='store_true', type=int, help="Enter a Quarter number: 1,2,3, or 4 ")
UNE store_true
l'action ne prend aucun paramètre (c'est-à-dire nargs = 0). Sa valeur par défaut est False
, et s'il est utilisé, l'attribut est défini sur True
.
Si vous souhaitez que l'utilisateur donne l'un de ces quatre chiffres, je vous suggère d'utiliser
parser.add_argument('-q', '--quarter', type=int, choices=[1,2,3,4], help="...")
https://docs.python.org/3/library/argparse.html#choices a un exemple similaire.
Les exemples de https://docs.python.org/3/library/argparse.html#action donnent une assez bonne idée des paramètres utilisés par chaque classe d'action.
Il y a un Python bogue/problème concernant l'amélioration de la documentation ou du message d'erreur lorsque des paramètres inutiles sont donnés dans la fonction. En l'état, c'est le Python = définition de sous-classe qui émet le message d'erreur.