python - Throw ValueError for two digit year dates with dateutil.parser.parse -
while doing data cleaning, noticed dateutil.parser.parse
failed reject malformed date, thinking first number in 2 digit year. can library forced treat 2 digit years invalid?
example:
from dateutil.parser import parse parse('22-23 february')
outputs:
datetime.datetime(2022, 2, 23, 0, 0)
i managed work around passing custom dateutil.parser.parserinfo
object via parserinfo
parameter dateutil.parser.parse
. luckily, dateutil.parser.parserinfo
has convertyear
method can overloaded in derived class in order perform validations on year.
from dateutil.parser import parse, parserinfo class notwodigityearparserinfo(parserinfo): def convertyear(self, year, century_specified=false): if year < 100 , not century_specified: raise valueerror('two digit years not supported.') return parserinfo.convertyear(self, year, century_specified) parse('22-23 february', parserinfo = notwodigityearparserinfo())
outputs:
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: 2 digit years not supported.
Comments
Post a Comment