grant list.index() a more informative error message #7252

This commit is contained in:
Benjamin Peterson 2009-11-02 16:14:19 +00:00
parent e2caf1f60e
commit c45a0cfb5f
1 changed files with 16 additions and 2 deletions

View File

@ -2276,7 +2276,8 @@ static PyObject *
listindex(PyListObject *self, PyObject *args) listindex(PyListObject *self, PyObject *args)
{ {
Py_ssize_t i, start=0, stop=Py_SIZE(self); 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, if (!PyArg_ParseTuple(args, "O|O&O&:index", &v,
_PyEval_SliceIndex, &start, _PyEval_SliceIndex, &start,
@ -2299,7 +2300,20 @@ listindex(PyListObject *self, PyObject *args)
else if (cmp < 0) else if (cmp < 0)
return NULL; 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; return NULL;
} }