Perform str check after TypeError is raised
---------
Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
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')
--- /dev/null
+Make error message more meaningful for when :meth:`bytearray.extend` is
+called with a :class:`str` object.
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);