Better error messages when a sequence is indexed with a non-integer.

Previously, this said "unsubscriptable object"; in 1.5.1, the reverse
problem existed, where None[''] would complain about a non-integer
index.  This fix does the right thing in all cases (for get, set and
del item).
This commit is contained in:
Guido van Rossum 1998-08-13 16:44:44 +00:00
parent 54047c84d1
commit 21308243ca
1 changed files with 17 additions and 6 deletions

View File

@ -232,8 +232,11 @@ PyObject_GetItem(o, key)
if (m && m->mp_subscript)
return m->mp_subscript(o, key);
if (PyInt_Check(key))
return PySequence_GetItem(o, PyInt_AsLong(key));
if (o->ob_type->tp_as_sequence) {
if (PyInt_Check(key))
return PySequence_GetItem(o, PyInt_AsLong(key));
return type_error("sequence index must be integer");
}
return type_error("unsubscriptable object");
}
@ -254,8 +257,12 @@ PyObject_SetItem(o, key, value)
if (m && m->mp_ass_subscript)
return m->mp_ass_subscript(o, key, value);
if (PyInt_Check(key))
return PySequence_SetItem(o, PyInt_AsLong(key), value);
if (o->ob_type->tp_as_sequence) {
if (PyInt_Check(key))
return PySequence_SetItem(o, PyInt_AsLong(key), value);
type_error("sequence index must be integer");
return -1;
}
type_error("object does not support item assignment");
return -1;
@ -276,8 +283,12 @@ PyObject_DelItem(o, key)
if (m && m->mp_ass_subscript)
return m->mp_ass_subscript(o, key, (PyObject*)NULL);
if (PyInt_Check(key))
return PySequence_DelItem(o, PyInt_AsLong(key));
if (o->ob_type->tp_as_sequence) {
if (PyInt_Check(key))
return PySequence_DelItem(o, PyInt_AsLong(key));
type_error("sequence index must be integer");
return -1;
}
type_error("object does not support item deletion");
return -1;