mirror of https://github.com/python/cpython
Issue #22077: Improve index error messages for bytearrays, bytes, lists, and
tuples by adding 'or slices'. Added ', not <typename' for bytearrays. Original patch by Claudiu Popa.
This commit is contained in:
parent
7f9cc9359b
commit
ffff1440d1
|
@ -30,6 +30,12 @@ class CommonTest(seq_tests.CommonTest):
|
|||
self.assertNotEqual(id(a), id(b))
|
||||
self.assertEqual(a, b)
|
||||
|
||||
def test_getitem_error(self):
|
||||
msg = "list indices must be integers or slices"
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
a = []
|
||||
a['a'] = "python"
|
||||
|
||||
def test_repr(self):
|
||||
l0 = []
|
||||
l2 = [0, 1, 2]
|
||||
|
@ -120,6 +126,10 @@ class CommonTest(seq_tests.CommonTest):
|
|||
a[-1] = 9
|
||||
self.assertEqual(a, self.type2test([5,6,7,8,9]))
|
||||
|
||||
msg = "list indices must be integers or slices"
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
a['a'] = "python"
|
||||
|
||||
def test_delitem(self):
|
||||
a = self.type2test([0, 1])
|
||||
del a[1]
|
||||
|
|
|
@ -699,6 +699,11 @@ class BaseBytesTest:
|
|||
class BytesTest(BaseBytesTest, unittest.TestCase):
|
||||
type2test = bytes
|
||||
|
||||
def test_getitem_error(self):
|
||||
msg = "byte indices must be integers or slices"
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
b'python'['a']
|
||||
|
||||
def test_buffer_is_readonly(self):
|
||||
fd = os.open(__file__, os.O_RDONLY)
|
||||
with open(fd, "rb", buffering=0) as f:
|
||||
|
@ -753,6 +758,17 @@ class BytesTest(BaseBytesTest, unittest.TestCase):
|
|||
class ByteArrayTest(BaseBytesTest, unittest.TestCase):
|
||||
type2test = bytearray
|
||||
|
||||
def test_getitem_error(self):
|
||||
msg = "bytearray indices must be integers or slices"
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
bytearray(b'python')['a']
|
||||
|
||||
def test_setitem_error(self):
|
||||
msg = "bytearray indices must be integers or slices"
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
b = bytearray(b'python')
|
||||
b['a'] = "python"
|
||||
|
||||
def test_nohash(self):
|
||||
self.assertRaises(TypeError, hash, bytearray())
|
||||
|
||||
|
|
|
@ -6,6 +6,11 @@ import pickle
|
|||
class TupleTest(seq_tests.CommonTest):
|
||||
type2test = tuple
|
||||
|
||||
def test_getitem_error(self):
|
||||
msg = "tuple indices must be integers or slices"
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
()['a']
|
||||
|
||||
def test_constructors(self):
|
||||
super().test_constructors()
|
||||
# calling built-in types without argument must return empty
|
||||
|
|
|
@ -10,6 +10,10 @@ Release date: TBA
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #22077: Improve index error messages for bytearrays, bytes, lists,
|
||||
and tuples by adding 'or slices'. Added ', not <typename' for bytearrays.
|
||||
Original patch by Claudiu Popa.
|
||||
|
||||
- Issue #18395: Rename ``_Py_char2wchar()`` to :c:func:`Py_DecodeLocale`,
|
||||
rename ``_Py_wchar2char()`` to :c:func:`Py_EncodeLocale`, and document
|
||||
these functions.
|
||||
|
|
|
@ -445,7 +445,9 @@ bytearray_subscript(PyByteArrayObject *self, PyObject *index)
|
|||
}
|
||||
}
|
||||
else {
|
||||
PyErr_SetString(PyExc_TypeError, "bytearray indices must be integers");
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"bytearray indices must be integers or slices, not %.200s",
|
||||
Py_TYPE(index)->tp_name);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
@ -650,7 +652,9 @@ bytearray_ass_subscript(PyByteArrayObject *self, PyObject *index, PyObject *valu
|
|||
}
|
||||
}
|
||||
else {
|
||||
PyErr_SetString(PyExc_TypeError, "bytearray indices must be integer");
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"bytearray indices must be integers or slices, not %.200s",
|
||||
Py_TYPE(index)->tp_name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -999,7 +999,7 @@ bytes_subscript(PyBytesObject* self, PyObject* item)
|
|||
}
|
||||
else {
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"byte indices must be integers, not %.200s",
|
||||
"byte indices must be integers or slices, not %.200s",
|
||||
Py_TYPE(item)->tp_name);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -2444,7 +2444,7 @@ list_subscript(PyListObject* self, PyObject* item)
|
|||
}
|
||||
else {
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"list indices must be integers, not %.200s",
|
||||
"list indices must be integers or slices, not %.200s",
|
||||
item->ob_type->tp_name);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -2608,7 +2608,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
|
|||
}
|
||||
else {
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"list indices must be integers, not %.200s",
|
||||
"list indices must be integers or slices, not %.200s",
|
||||
item->ob_type->tp_name);
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -746,7 +746,7 @@ tuplesubscript(PyTupleObject* self, PyObject* item)
|
|||
}
|
||||
else {
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"tuple indices must be integers, not %.200s",
|
||||
"tuple indices must be integers or slices, not %.200s",
|
||||
Py_TYPE(item)->tp_name);
|
||||
return NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue