diff -r e55cc0834e9c Lib/test/list_tests.py --- a/Lib/test/list_tests.py Wed Apr 15 17:08:45 2015 -0400 +++ b/Lib/test/list_tests.py Wed Apr 15 18:15:35 2015 -0400 @@ -102,13 +102,27 @@ self.assertEqual(a, self.type2test([0, 200])) a[-2] = 100 self.assertEqual(a, self.type2test([100, 200])) - self.assertRaises(IndexError, a.__setitem__, -3, 200) - self.assertRaises(IndexError, a.__setitem__, 2, 200) + + with self.assertRaises(IndexError) as context: + a.__setitem__(-3, 200) + self.assertEqual(context.exception.index, -3) + self.assertEqual(context.exception.length, 2) + + with self.assertRaises(IndexError) as context: + a.__setitem__(2, 200) + self.assertEqual(context.exception.index, 2) + self.assertEqual(context.exception.length, 2) a = self.type2test([]) - self.assertRaises(IndexError, a.__setitem__, 0, 200) - self.assertRaises(IndexError, a.__setitem__, -1, 200) self.assertRaises(TypeError, a.__setitem__) + with self.assertRaises(IndexError) as context: + a.__setitem__(0, 200) + self.assertEqual(context.exception.index, 0) + self.assertEqual(context.exception.length, 0) + with self.assertRaises(IndexError) as context: + a.__setitem__(-1, 200) + self.assertEqual(context.exception.index, -1) + self.assertEqual(context.exception.length, 0) a = self.type2test([0,1,2,3,4]) a[0] = 1 diff -r e55cc0834e9c Lib/test/seq_tests.py --- a/Lib/test/seq_tests.py Wed Apr 15 17:08:45 2015 -0400 +++ b/Lib/test/seq_tests.py Wed Apr 15 18:15:35 2015 -0400 @@ -319,8 +319,14 @@ self.assertEqual(a.__getitem__(1), 11) self.assertEqual(a.__getitem__(-2), 10) self.assertEqual(a.__getitem__(-1), 11) - self.assertRaises(IndexError, a.__getitem__, -3) - self.assertRaises(IndexError, a.__getitem__, 3) + with self.assertRaises(IndexError) as context: + a.__getitem__(3) + self.assertEqual(context.exception.index, 3) + self.assertEqual(context.exception.length, 2) + with self.assertRaises(IndexError) as context: + a.__getitem__(-3) + self.assertEqual(context.exception.index, -3) + self.assertEqual(context.exception.length, 2) self.assertEqual(a.__getitem__(slice(0,1)), self.type2test([10])) self.assertEqual(a.__getitem__(slice(1,2)), self.type2test([11])) self.assertEqual(a.__getitem__(slice(0,2)), self.type2test([10, 11])) diff -r e55cc0834e9c Lib/test/test_exceptions.py --- a/Lib/test/test_exceptions.py Wed Apr 15 17:08:45 2015 -0400 +++ b/Lib/test/test_exceptions.py Wed Apr 15 18:15:35 2015 -0400 @@ -377,6 +377,23 @@ 'pickled "%r", attribute "%s' % (e, checkArgName)) + def testIndexErrorAttributes(self): + exc = IndexError('spam') + self.assertIsNone(exc.index) + self.assertIsNone(exc.length) + + exc = IndexError('spam', index=1) + self.assertEqual(exc.index, 1) + self.assertIsNone(exc.length) + + exc = IndexError('spam', length=2) + self.assertIsNone(exc.index) + self.assertEqual(exc.length, 2) + + exc = IndexError('spam', index=2, length=1) + self.assertEqual(exc.index, 2) + self.assertEqual(exc.length, 1) + def testWithTraceback(self): try: raise IndexError(4)