Index: Objects/listobject.c =================================================================== --- Objects/listobject.c (Revision 67572) +++ Objects/listobject.c (Arbeitskopie) @@ -2261,7 +2261,7 @@ listindex(PyListObject *self, PyObject *args) { Py_ssize_t i, start=0, stop=Py_SIZE(self); - PyObject *v; + PyObject *v, *repr; if (!PyArg_ParseTuple(args, "O|O&O&:index", &v, _PyEval_SliceIndex, &start, @@ -2284,7 +2284,15 @@ else if (cmp < 0) return NULL; } - PyErr_SetString(PyExc_ValueError, "list.index(x): x not in list"); + repr = PyObject_Repr(v); + if (!repr) { + PyErr_SetString(PyExc_ValueError, + "list.index(): item not in list"); + } else { + PyErr_Format(PyExc_ValueError, + "list.index(): %.200s not in list", + PyString_AS_STRING(repr)); + } return NULL; } @@ -2308,6 +2316,7 @@ listremove(PyListObject *self, PyObject *v) { Py_ssize_t i; + PyObject *repr; for (i = 0; i < Py_SIZE(self); i++) { int cmp = PyObject_RichCompareBool(self->ob_item[i], v, Py_EQ); @@ -2320,7 +2329,15 @@ else if (cmp < 0) return NULL; } - PyErr_SetString(PyExc_ValueError, "list.remove(x): x not in list"); + repr = PyObject_Repr(v); + if (!repr) { + PyErr_SetString(PyExc_ValueError, + "list.remove(): item not in list"); + } else { + PyErr_Format(PyExc_ValueError, + "list.remove(): %.200s not in list", + PyString_AS_STRING(repr)); + } return NULL; } Index: Lib/test/test_list.py =================================================================== --- Lib/test/test_list.py (Revision 67572) +++ Lib/test/test_list.py (Arbeitskopie) @@ -59,6 +59,24 @@ self.assertRaises((MemoryError, OverflowError), mul, lst, n) self.assertRaises((MemoryError, OverflowError), imul, lst, n) + def test_exceptions(self): + class A: + def __repr__(self): + raise RuntimeError + for method in ([].remove, [].index): + try: + method('a') + except ValueError, err: + self.assert_("'a'" in err.args[0]) + else: + self.fail('ValueError not raised') + try: + method(A()) + except ValueError, err: + self.assert_("item" in err.args[0]) + else: + self.fail('ValueError not raised') + def test_main(verbose=None): test_support.run_unittest(ListTest)