summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Ting <65202977+jayasting98@users.noreply.github.com>2024-02-24 23:34:45 (GMT)
committerGitHub <noreply@github.com>2024-02-24 23:34:45 (GMT)
commit948acd6ed856251dc5889cc34cf7a58210c4f9a9 (patch)
treeff3492e2fe56bdf4d04113535eeda3d1e60f7362
parente3dedeae7abbeda0cb3f1d872ebbb914635d64f2 (diff)
downloadcpython-948acd6ed856251dc5889cc34cf7a58210c4f9a9.zip
cpython-948acd6ed856251dc5889cc34cf7a58210c4f9a9.tar.gz
cpython-948acd6ed856251dc5889cc34cf7a58210c4f9a9.tar.bz2
gh-115323: Add meaningful error message for using bytearray.extend with str (#115332)
Perform str check after TypeError is raised --------- Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
-rw-r--r--Lib/test/test_bytes.py7
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2024-02-12-23-29-17.gh-issue-115323.3t6687.rst2
-rw-r--r--Objects/bytearrayobject.c4
3 files changed, 13 insertions, 0 deletions
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index a3804a9..71bb1e7 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -1599,6 +1599,13 @@ class ByteArrayTest(BaseBytesTest, unittest.TestCase):
a = bytearray(b'')
a.extend([Indexable(ord('a'))])
self.assertEqual(a, b'a')
+ a = bytearray(b'abc')
+ self.assertRaisesRegex(TypeError, # Override for string.
+ "expected iterable of integers; got: 'str'",
+ a.extend, 'def')
+ self.assertRaisesRegex(TypeError, # But not for others.
+ "can't extend bytearray with float",
+ a.extend, 1.0)
def test_remove(self):
b = bytearray(b'hello')
diff --git a/Misc/NEWS.d/next/Core and Builtins/2024-02-12-23-29-17.gh-issue-115323.3t6687.rst b/Misc/NEWS.d/next/Core and Builtins/2024-02-12-23-29-17.gh-issue-115323.3t6687.rst
new file mode 100644
index 0000000..1718556
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2024-02-12-23-29-17.gh-issue-115323.3t6687.rst
@@ -0,0 +1,2 @@
+Make error message more meaningful for when :meth:`bytearray.extend` is
+called with a :class:`str` object.
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index acc59b9..5e3b3af 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -1729,6 +1729,10 @@ bytearray_extend(PyByteArrayObject *self, PyObject *iterable_of_ints)
while ((item = PyIter_Next(it)) != NULL) {
if (! _getbytevalue(item, &value)) {
+ if (PyErr_ExceptionMatches(PyExc_TypeError) && PyUnicode_Check(iterable_of_ints)) {
+ PyErr_Format(PyExc_TypeError,
+ "expected iterable of integers; got: 'str'");
+ }
Py_DECREF(item);
Py_DECREF(it);
Py_DECREF(bytearray_obj);