diff --git a/dateutil/parser/_parser.py b/dateutil/parser/_parser.py index 171626906013db217843f0b8004d8ca878edc176_ZGF0ZXV0aWwvcGFyc2VyL19wYXJzZXIucHk=..6b0fc9b73d6aee07821740dfe3d260b08fdc2790_ZGF0ZXV0aWwvcGFyc2VyL19wYXJzZXIucHk= 100644 --- a/dateutil/parser/_parser.py +++ b/dateutil/parser/_parser.py @@ -458,8 +458,8 @@ raise ValueError('Year is already set') self.ystridx = len(self) - 1 - def _resolve_from_stridxs(self): + def _resolve_from_stridxs(self, strids): """ Try to resolve the identities of year/month/day elements using ystridx, mstridx, and dstridx, if enough of these are specified. """ @@ -462,10 +462,7 @@ """ Try to resolve the identities of year/month/day elements using ystridx, mstridx, and dstridx, if enough of these are specified. """ - strids = {'y': self.ystridx, 'm': self.mstridx, 'd': self.dstridx} - strids = {key: strids[key] for key in strids if strids[key] is not None} - if len(self) == 3 and len(strids) == 2: # we can back out the remaining stridx value missing = [x for x in range(3) if x not in strids.values()] @@ -476,11 +473,10 @@ strids[key] = val assert len(self) == len(strids) # otherwise this should not be called - out = {'y': None, 'm': None, 'd': None} - out.update({key: self[strids[key]] for key in strids}) - return (out['y'], out['m'], out['d']) + out = {key: self[strids[key]] for key in strids} + return (out.get('y'), out.get('m'), out.get('d')) def resolve_ymd(self, yearfirst, dayfirst): len_ymd = len(self) year, month, day = (None, None, None) @@ -482,9 +478,12 @@ def resolve_ymd(self, yearfirst, dayfirst): len_ymd = len(self) year, month, day = (None, None, None) - strids = {'y': self.ystridx, 'm': self.mstridx, 'd': self.dstridx} - strids = {key: strids[key] for key in strids if strids[key] is not None} + strids = (('y', self.ystridx), + ('m', self.mstridx), + ('d', self.dstridx)) + + strids = {key: val for key, val in strids if val is not None} if (len(self) == len(strids) > 0 or (len(self) == 3 and len(strids) == 2)): @@ -489,6 +488,6 @@ if (len(self) == len(strids) > 0 or (len(self) == 3 and len(strids) == 2)): - return self._resolve_from_stridxs() + return self._resolve_from_stridxs(strids) mstridx = self.mstridx