]> granicus.if.org Git - python/commitdiff
grant list.index() a more informative error message #7252
authorBenjamin Peterson <benjamin@python.org>
Mon, 2 Nov 2009 16:14:19 +0000 (16:14 +0000)
committerBenjamin Peterson <benjamin@python.org>
Mon, 2 Nov 2009 16:14:19 +0000 (16:14 +0000)
Objects/listobject.c

index 39b8b1a882c2f2e7aa975580f7604001781de33c..dea51ed768a6385f259f45c999098c0ab061fcb2 100644 (file)
@@ -2276,7 +2276,8 @@ static PyObject *
 listindex(PyListObject *self, PyObject *args)
 {
        Py_ssize_t i, start=0, stop=Py_SIZE(self);
-       PyObject *v;
+       PyObject *v, *format_tuple, *err_string;
+       static PyObject *err_format = NULL;
 
        if (!PyArg_ParseTuple(args, "O|O&O&:index", &v,
                                    _PyEval_SliceIndex, &start,
@@ -2299,7 +2300,20 @@ listindex(PyListObject *self, PyObject *args)
                else if (cmp < 0)
                        return NULL;
        }
-       PyErr_SetString(PyExc_ValueError, "list.index(x): x not in list");
+       if (err_format == NULL) {
+               err_format = PyString_FromString("%r is not in list");
+               if (err_format == NULL)
+                       return NULL;
+       }
+       format_tuple = PyTuple_Pack(1, v);
+       if (format_tuple == NULL)
+               return NULL;
+       err_string = PyString_Format(err_format, format_tuple);
+       Py_DECREF(format_tuple);
+       if (err_string == NULL)
+               return NULL;
+       PyErr_SetObject(PyExc_ValueError, err_string);
+       Py_DECREF(err_string);
        return NULL;
 }