diff -r f1a25c088b8f Lib/test/test_range.py --- a/Lib/test/test_range.py Fri Nov 02 14:49:02 2012 +0100 +++ b/Lib/test/test_range.py Sun Nov 04 11:28:38 2012 +0000 @@ -312,6 +312,15 @@ self.assertRaises(TypeError, range, IN()) + # Test use of user-defined classes in slice indices. + self.assertEqual(range(10)[:I(5)], range(5)) + + with self.assertRaises(RuntimeError): + range(0, 10)[:IX()] + + with self.assertRaises(TypeError): + range(0, 10)[:IN()] + def test_count(self): self.assertEqual(range(3).count(-1), 0) self.assertEqual(range(3).count(0), 1) diff -r f1a25c088b8f Objects/rangeobject.c --- a/Objects/rangeobject.c Fri Nov 02 14:49:02 2012 +0100 +++ b/Objects/rangeobject.c Sun Nov 04 11:28:38 2012 +0000 @@ -331,11 +331,11 @@ if (PyIndex_Check(obj)) { result = PyNumber_Index(obj); } - } - if (result == NULL) { - PyErr_SetString(PyExc_TypeError, - "slice indices must be integers or " - "None or have an __index__ method"); + else { + PyErr_SetString(PyExc_TypeError, + "slice indices must be integers or " + "None or have an __index__ method"); + } } return result; }