PyObject_GetItem(), PyObject_SetItem(), PyObject_DelItem(): Fix a few

confusing error messages.  If a new-style class has no sequence or
mapping behavior, attempting to use the indexing notation with a
non-integer key would complain that the sequence index must be an
integer, rather than complaining that the operation is not supported.
This commit is contained in:
Guido van Rossum 2001-11-24 18:24:47 +00:00
parent bf7c52c233
commit 64585f6afb
1 changed files with 10 additions and 5 deletions

View File

@ -103,7 +103,8 @@ PyObject_GetItem(PyObject *o, PyObject *key)
return NULL;
return PySequence_GetItem(o, key_value);
}
return type_error("sequence index must be integer");
else if (o->ob_type->tp_as_sequence->sq_item)
return type_error("sequence index must be integer");
}
return type_error("unsubscriptable object");
@ -131,8 +132,10 @@ PyObject_SetItem(PyObject *o, PyObject *key, PyObject *value)
return -1;
return PySequence_SetItem(o, key_value, value);
}
type_error("sequence index must be integer");
return -1;
else if (o->ob_type->tp_as_sequence->sq_ass_item) {
type_error("sequence index must be integer");
return -1;
}
}
type_error("object does not support item assignment");
@ -161,8 +164,10 @@ PyObject_DelItem(PyObject *o, PyObject *key)
return -1;
return PySequence_DelItem(o, key_value);
}
type_error("sequence index must be integer");
return -1;
else if (o->ob_type->tp_as_sequence->sq_ass_item) {
type_error("sequence index must be integer");
return -1;
}
}
type_error("object does not support item deletion");