diff options
author | Jay Ting <65202977+jayasting98@users.noreply.github.com> | 2024-02-24 23:34:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-24 23:34:45 (GMT) |
commit | 948acd6ed856251dc5889cc34cf7a58210c4f9a9 (patch) | |
tree | ff3492e2fe56bdf4d04113535eeda3d1e60f7362 | |
parent | e3dedeae7abbeda0cb3f1d872ebbb914635d64f2 (diff) | |
download | cpython-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.py | 7 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2024-02-12-23-29-17.gh-issue-115323.3t6687.rst | 2 | ||||
-rw-r--r-- | Objects/bytearrayobject.c | 4 |
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); |