Eine Erinnerung daran, wie ein Wert vom Typ datetime.date als optionales Argument in Python empfangen wird.
2020-01-01
), als optionales Argument und konvertiert es in den Typ datetime.date.Für die grundlegende Verwendung von Argparse war Official Tutorial hilfreich. Im Tutorial wird der Typ int angegeben, aber dieses Mal möchte ich den Typ datetime.date angeben.
Definieren Sie eine Funktion date_type
, die eine Datumszeichenfolge (z. B. 2020-01-01
) in ein Datumsobjekt konvertiert, und geben Sie sie im Typ ArgumentParser an.
test.py
import argparse
import datetime
# str ->Datumstyp-Konvertierungsfunktion
def date_type(date_str):
return datetime.date.fromisoformat(date_str)
if __name__ == '__main__':
#Holen Sie sich ArgumentParser
arg_parser = argparse.ArgumentParser()
#Definition von Datumsangaben
arg_parser.add_argument("-d", "--date",
help="Date must be in ISO format. For example: 2020-01-01.",
type=date_type)
#Holen Sie sich optionale Argumente
args = arg_parser.parse_args()
date = args.date
print(date.year,date.month,date.day)
Ausführungsergebnis
>python test.py -d 2020-01-01
2020 1 1
Wenn im obigen Code das optionale Argument ein anderes Format als das Datum des ISO-Formats hat, wird der folgende Fehler ausgegeben.
>python test.py -d hoge
usage: mtg.py [-h] [-d DATE]
mtg.py: error: argument -d/--date: invalid date_type value: 'hoge'
Ich mag es nicht, wenn der definierte Funktionsname date_type in der Fehlermeldung enthalten ist. Passen Sie daher den Fehlerinhalt an.
Ändern Sie die Typkonvertierungsfunktion date_type
früher wie folgt.
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öst eine neue Ausnahme aus.
>>> import datetime
>>> datetime.date.fromisoformat('hoge')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid isoformat string: 'hoge'
Ausführungsergebnis
>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
Zuerst habe ich mit python argparser datetime
gegoogelt, aber ich konnte keine japanische Literatur finden, weil sie zu eckig war, also habe ich einen Artikel gemacht.
Offizielles Argparser-Tutorial: Argparse-Tutorial - Python 3.8.2-Dokumentation
Ich habe auch auf den Artikel von @ kzkadc verwiesen: bow: [Eine kurze Zusammenfassung der Verwendung von 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)
Offizielle Dokumentation [argparse \ - \ - \ - Befehlszeilenoption, Argument, Unterbefehlsparser - Python 3 \ .8 \ .2 Dokumentation](https://docs.python.org/en/3/library/argparse.html# Art)
Recommended Posts