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