Index: Lib/test/test_datetime.py =================================================================== --- Lib/test/test_datetime.py (revision 82099) +++ Lib/test/test_datetime.py (working copy) @@ -3018,27 +3018,11 @@ # created anyway. tiny = cls(MINYEAR, 1, 1, 0, 0, 37, tzinfo=UOFS(1439)) # That goes back 1 minute less than a full day. - t = tiny.utctimetuple() - self.assertEqual(t.tm_year, MINYEAR-1) - self.assertEqual(t.tm_mon, 12) - self.assertEqual(t.tm_mday, 31) - self.assertEqual(t.tm_hour, 0) - self.assertEqual(t.tm_min, 1) - self.assertEqual(t.tm_sec, 37) - self.assertEqual(t.tm_yday, 366) # "year 0" is a leap year - self.assertEqual(t.tm_isdst, 0) + with self.assertRaises(OverflowError): tiny.utctimetuple() huge = cls(MAXYEAR, 12, 31, 23, 59, 37, 999999, tzinfo=UOFS(-1439)) # That goes forward 1 minute less than a full day. - t = huge.utctimetuple() - self.assertEqual(t.tm_year, MAXYEAR+1) - self.assertEqual(t.tm_mon, 1) - self.assertEqual(t.tm_mday, 1) - self.assertEqual(t.tm_hour, 23) - self.assertEqual(t.tm_min, 58) - self.assertEqual(t.tm_sec, 37) - self.assertEqual(t.tm_yday, 1) - self.assertEqual(t.tm_isdst, 0) + with self.assertRaises(OverflowError): huge.utctimetuple() def test_tzinfo_isoformat(self): zero = FixedOffset(0, "+00:00") Index: Modules/datetimemodule.c =================================================================== --- Modules/datetimemodule.c (revision 82099) +++ Modules/datetimemodule.c (working copy) @@ -4932,15 +4932,8 @@ mm -= offset; stat = normalize_datetime(&y, &m, &d, &hh, &mm, &ss, &us); - if (stat < 0) { - /* At the edges, it's possible we overflowed - * beyond MINYEAR or MAXYEAR. - */ - if (PyErr_ExceptionMatches(PyExc_OverflowError)) - PyErr_Clear(); - else - return NULL; - } + if (stat < 0) + return NULL; } return build_struct_time(y, m, d, hh, mm, ss, 0); }