diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index 389cd043d6c0f39..a75b95d988b0709 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -796,6 +796,9 @@ def test_complexstr(self): self.assertEqual(str(s[1:]), 'bc') self.assertEqual(str(s[::-1]), 'cbA') self.assertEqual(str(s + curses.complexstr(['Z'])), 'AbcZ') + # Concatenating anything else raises instead of returning NotImplemented. + self.assertRaises(TypeError, lambda: s + 'Z') + self.assertRaises(TypeError, lambda: s + cc('Z')) # The empty complexstr. self.assertEqual(len(curses.complexstr([])), 0) self.assertEqual(str(curses.complexstr('')), '') diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 2ff15dd31d21803..781b39628bfa31e 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -1590,7 +1590,10 @@ complexstr_concat(PyObject *a, PyObject *b) { cursesmodule_state *state = get_cursesmodule_state_by_cls(Py_TYPE(a)); if (!Py_IS_TYPE(b, state->complexstr_type)) { - Py_RETURN_NOTIMPLEMENTED; + PyErr_Format(PyExc_TypeError, + "can only concatenate complexstr to complexstr, not %T", + b); + return NULL; } PyCursesComplexStrObject *sa = _PyCursesComplexStrObject_CAST(a); PyCursesComplexStrObject *sb = _PyCursesComplexStrObject_CAST(b);