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