Сгенерируйте ValueError для двухзначных дат года с помощью dateutil.parser.parse
Делая некоторую очистку данных, я заметил, что dateutil.parser.parse
не удалось отклонить определенную искаженную дату, думая, что первая цифра в ней - двузначный год. Можно ли заставить эту библиотеку считать двухзначные годы недействительными?
Пример:
from dateutil.parser import parse
parse('22-23 February')
выходы:
datetime.datetime(2022, 2, 23, 0, 0)
1 ответ
Решение
Мне удалось обойти это, передавая обычай dateutil.parser.parserinfo
объект через parserinfo
параметр для dateutil.parser.parse
, К счастью, dateutil.parser.parserinfo
имеет convertyear
метод, который может быть перегружен в производном классе для выполнения дополнительной проверки года.
from dateutil.parser import parse, parserinfo
class NoTwoDigitYearParserInfo(parserinfo):
def convertyear(self, year, century_specified=False):
if year < 100 and not century_specified:
raise ValueError('Two digit years are not supported.')
return parserinfo.convertyear(self, year, century_specified)
parse('22-23 February', parserinfo = NoTwoDigitYearParserInfo())
выходы:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/site-packages/dateutil/parser.py", line 1162, in parse
return parser(parserinfo).parse(timestr, **kwargs)
File "/usr/local/lib/python3.5/site-packages/dateutil/parser.py", line 552, in parse
res, skipped_tokens = self._parse(timestr, **kwargs)
File "/usr/local/lib/python3.5/site-packages/dateutil/parser.py", line 1055, in _parse
if not info.validate(res):
File "/usr/local/lib/python3.5/site-packages/dateutil/parser.py", line 360, in validate
res.year = self.convertyear(res.year, res.century_specified)
File "<stdin>", line 4, in convertyear
ValueError: Two digit years are not supported.