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.assertNotEqual(id(a), id(b))
|
||||||
self.assertEqual(a, 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):
|
def test_repr(self):
|
||||||
l0 = []
|
l0 = []
|
||||||
l2 = [0, 1, 2]
|
l2 = [0, 1, 2]
|
||||||
|
@ -120,6 +126,10 @@ class CommonTest(seq_tests.CommonTest):
|
||||||
a[-1] = 9
|
a[-1] = 9
|
||||||
self.assertEqual(a, self.type2test([5,6,7,8,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):
|
def test_delitem(self):
|
||||||
a = self.type2test([0, 1])
|
a = self.type2test([0, 1])
|
||||||
del a[1]
|
del a[1]
|
||||||
|
|
|
@ -699,6 +699,11 @@ class BaseBytesTest:
|
||||||
class BytesTest(BaseBytesTest, unittest.TestCase):
|
class BytesTest(BaseBytesTest, unittest.TestCase):
|
||||||
type2test = bytes
|
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):
|
def test_buffer_is_readonly(self):
|
||||||
fd = os.open(__file__, os.O_RDONLY)
|
fd = os.open(__file__, os.O_RDONLY)
|
||||||
with open(fd, "rb", buffering=0) as f:
|
with open(fd, "rb", buffering=0) as f:
|
||||||
|
@ -753,6 +758,17 @@ class BytesTest(BaseBytesTest, unittest.TestCase):
|
||||||
class ByteArrayTest(BaseBytesTest, unittest.TestCase):
|
class ByteArrayTest(BaseBytesTest, unittest.TestCase):
|
||||||
type2test = bytearray
|
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):
|
def test_nohash(self):
|
||||||
self.assertRaises(TypeError, hash, bytearray())
|
self.assertRaises(TypeError, hash, bytearray())
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,11 @@ import pickle
|
||||||
class TupleTest(seq_tests.CommonTest):
|
class TupleTest(seq_tests.CommonTest):
|
||||||
type2test = tuple
|
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):
|
def test_constructors(self):
|
||||||
super().test_constructors()
|
super().test_constructors()
|
||||||
# calling built-in types without argument must return empty
|
# calling built-in types without argument must return empty
|
||||||
|
|
|
@ -10,6 +10,10 @@ Release date: TBA
|
||||||
Core and Builtins
|
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`,
|
- Issue #18395: Rename ``_Py_char2wchar()`` to :c:func:`Py_DecodeLocale`,
|
||||||
rename ``_Py_wchar2char()`` to :c:func:`Py_EncodeLocale`, and document
|
rename ``_Py_wchar2char()`` to :c:func:`Py_EncodeLocale`, and document
|
||||||
these functions.
|
these functions.
|
||||||
|
|
|
@ -445,7 +445,9 @@ bytearray_subscript(PyByteArrayObject *self, PyObject *index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -650,7 +652,9 @@ bytearray_ass_subscript(PyByteArrayObject *self, PyObject *index, PyObject *valu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -999,7 +999,7 @@ bytes_subscript(PyBytesObject* self, PyObject* item)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PyErr_Format(PyExc_TypeError,
|
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);
|
Py_TYPE(item)->tp_name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2444,7 +2444,7 @@ list_subscript(PyListObject* self, PyObject* item)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PyErr_Format(PyExc_TypeError,
|
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);
|
item->ob_type->tp_name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -2608,7 +2608,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PyErr_Format(PyExc_TypeError,
|
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);
|
item->ob_type->tp_name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -746,7 +746,7 @@ tuplesubscript(PyTupleObject* self, PyObject* item)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PyErr_Format(PyExc_TypeError,
|
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);
|
Py_TYPE(item)->tp_name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue