https://github.com/python/cpython/commit/948acd6ed856251dc5889cc34cf7a58210c4f9a9
commit: 948acd6ed856251dc5889cc34cf7a58210c4f9a9
branch: main
author: Jay Ting <[email protected]>
committer: terryjreedy <[email protected]>
date: 2024-02-24T18:34:45-05:00
summary:

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 <[email protected]>

files:
A Misc/NEWS.d/next/Core and 
Builtins/2024-02-12-23-29-17.gh-issue-115323.3t6687.rst
M Lib/test/test_bytes.py
M Objects/bytearrayobject.c

diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index a3804a945f2e3a..71bb1e75c6affd 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -1599,6 +1599,13 @@ def test_extend(self):
         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 00000000000000..171855608fbc6a
--- /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 acc59b926448ca..5e3b3affbc76c5 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);

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to