Un rappel sur la façon de recevoir une valeur de type datetime.date comme argument facultatif en python.
2020-01-01
) comme argument facultatif et la convertit en type datetime.date.Pour l'utilisation de base d'Argparse, Official Tutorial a été utile. Dans le didacticiel, le type int est spécifié, mais cette fois, je veux spécifier le type datetime.date.
Définissez une fonction date_type
qui convertit une chaîne de date (par exemple 2020-01-01
) en un objet de date et spécifiez-le dans le type ArgumentParser.
test.py
import argparse
import datetime
# str ->fonction de conversion de type de date
def date_type(date_str):
return datetime.date.fromisoformat(date_str)
if __name__ == '__main__':
#Obtenir ArgumentParser
arg_parser = argparse.ArgumentParser()
#Définition des options de spécification de date
arg_parser.add_argument("-d", "--date",
help="Date must be in ISO format. For example: 2020-01-01.",
type=date_type)
#Obtenir des arguments facultatifs
args = arg_parser.parse_args()
date = args.date
print(date.year,date.month,date.day)
Résultat d'exécution
>python test.py -d 2020-01-01
2020 1 1
Dans le code ci-dessus, si l'argument facultatif est dans un format autre que le format de date ISO, l'erreur suivante sera générée.
>python test.py -d hoge
usage: mtg.py [-h] [-d DATE]
mtg.py: error: argument -d/--date: invalid date_type value: 'hoge'
Je n'aime pas que le nom de fonction défini date_type soit inclus dans le message d'erreur, alors personnalisez le contenu de l'erreur.
Modifiez la fonction de conversion de type date_type
plus tôt comme suit.
def date_type(date_str):
try:
return datetime.date.fromisoformat(date_str)
except ValueError as e:
raise argparse.ArgumentTypeError(str(e) + " Date must be in ISO format. ex. 2020-01-01")
Try-except lève une nouvelle exception.
>>> import datetime
>>> datetime.date.fromisoformat('hoge')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid isoformat string: 'hoge'
Résultat d'exécution
>python test.py -d hoge
usage: test.py [-h] [-d DATE]
test.py: error: argument -d/--date: Invalid isoformat string: 'hoge' Date must be in ISO format. ex. 2020-01-01
Au début, j'ai cherché sur Google python argparser datetime
, mais je n'ai pas trouvé de littérature japonaise parce que c'était trop coin de la boîte lourde, alors je l'ai écrit comme un article.
Tutoriel officiel Argparser: Tutoriel Argparse - Documentation Python 3.8.2
J'ai également fait référence à l'article de @ kzkadc: bow: [Un bref résumé de l'utilisation d'ArgumentParser --Qiita](https://qiita.com/kzkadc/items/e4fc7bc9c003de1eb6d0#%E5%9E%8B%E6%8C%87%E5%AE%9A%E3%81% 97% E3% 81% 9F% E3% 81% 84)
Documentation officielle [argparse \ - \ - \ - option de ligne de commande, argument, analyseur de sous-commande - documentation Python 3 \ .8 \ .2](https://docs.python.org/en/3/library/argparse.html# type)
Recommended Posts