Python dateutil.парсер выбрасывает " ValueError: день вне диапазона для месяца"
у меня есть следующий код, который прекрасно работает с форматом ввода типа {Year}/{Month}
за исключением 1994/02
вот пример кода
>>> import dateutil.parser as dtp
>>> dtp.parse('1994/01')
datetime.datetime(1994, 1, 29, 0, 0)
>>> dtp.parse('1994/03')
datetime.datetime(1994, 3, 29, 0, 0)
>>> dtp.parse('1994/02')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/antony/.virtualenvs/comp-invest/lib/python2.7/site-packages/dateutil/parser.py", line 720, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "/Users/antony/.virtualenvs/comp-invest/lib/python2.7/site-packages/dateutil/parser.py", line 317, in parse
ret = default.replace(**repl)
ValueError: day is out of range for month
как вы можете видеть, код отлично работает с 1994/01
и 1994/03
, но не с 1994/02
Это как-то связано с високосным годом? Но что более важно, как мне обойти эту проблему и заставить мой код работать снова?
спасибо
2 ответов
dtp.parse
заполняет отсутствующий день днем текущей даты. Вы запустили код на 2013/01/29 и день 29 не существует в феврале (т. е. 1994/02/29).
используйте этот код:
dtp.parse('1994/01'+'/01')
это даст последовательные результаты (первый день месяца) независимо от того, когда выполняется код.
Это ошибка в dateutil С тех пор это было исправлено. Версия 2.5.0 и выше больше не будет иметь эту проблему.
Если вы должны использовать более раннюю версию, я думаю, что" правильный " способ обработки вещей-указать :
from dateutil.parser import parse
from datetime import datetime, date
# First of the current month, at midnight.
default_date = datetime.combine(date.today(), datetime.min.time()).replace(day=1)
dt = parse('1994/01', default=default_date)
по умолчанию используется 1-е число месяца, а не текущий день.