diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -2729,6 +2729,10 @@ class UnicodeTest(string_tests.CommonTest, support.check_free_after_iterating(self, iter, str) support.check_free_after_iterating(self, reversed, str) + def test_invalid_sequences(self): + for letter in "deghijklmopqswyzABCDEFGHIJKLMOPQRSTVWXYZ": + with self.assertWarns(DeprecationWarning): + eval(r"'\%s'" % letter) class StringModuleTest(unittest.TestCase): def test_formatter_parser(self): diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -6022,6 +6022,9 @@ PyUnicode_DecodeUnicodeEscape(const char *s, goto error; } else { + /* Deprecate invalid escape sequences */ + PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "invalid escape sequence '%c'", c); WRITECHAR('\\'); WRITECHAR((unsigned char)s[-1]); }