diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index e1b2c794291848..0ed243da3ff9e2 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -2104,6 +2104,12 @@ def test_bug_34294(self): {'tag': 'foo', 'text': None}, {'tag': 'foo', 'text': None}]) + def test_bug_40736(self): + with self.assertRaisesRegex(TypeError, "got 'int'"): + re.search("x*", 5) + with self.assertRaisesRegex(TypeError, "got 'type'"): + re.search("x*", type) + class PatternReprTests(unittest.TestCase): def check(self, pattern, expected): diff --git a/Modules/_sre.c b/Modules/_sre.c index 9d0fc4ab7c03ab..a313ea19981fbf 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -389,7 +389,8 @@ getstring(PyObject* string, Py_ssize_t* p_length, /* get pointer to byte string buffer */ if (PyObject_GetBuffer(string, view, PyBUF_SIMPLE) != 0) { - PyErr_SetString(PyExc_TypeError, "expected string or bytes-like object"); + PyErr_Format(PyExc_TypeError, "expected string or bytes-like " + "object, got '%.200s'", Py_TYPE(string)->tp_name); return NULL; }