mirror of
https://github.com/AdaCore/cpython.git
synced 2026-02-12 12:57:15 -08:00
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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user