diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-12-06 17:15:29 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-12-06 17:15:29 (GMT) |
commit | 53c53ea4c5440593a527bf3d106b5f7feebeed40 (patch) | |
tree | f02e42b90c60a91a4eabbc08d748704785288dd8 | |
parent | b0f75c520ee882295b0d2884469056ebf0d0568b (diff) | |
download | cpython-53c53ea4c5440593a527bf3d106b5f7feebeed40.zip cpython-53c53ea4c5440593a527bf3d106b5f7feebeed40.tar.gz cpython-53c53ea4c5440593a527bf3d106b5f7feebeed40.tar.bz2 |
Issue #27030: Unknown escapes in re.sub() replacement template are allowed
again. But they still are deprecated and will be disabled in 3.7.
-rw-r--r-- | Doc/library/re.rst | 7 | ||||
-rw-r--r-- | Doc/whatsnew/3.6.rst | 5 | ||||
-rw-r--r-- | Lib/sre_parse.py | 4 | ||||
-rw-r--r-- | Lib/test/test_re.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
5 files changed, 16 insertions, 5 deletions
diff --git a/Doc/library/re.rst b/Doc/library/re.rst index 218bbf8..a298d97 100644 --- a/Doc/library/re.rst +++ b/Doc/library/re.rst @@ -758,7 +758,12 @@ form. Unmatched groups are replaced with an empty string. .. versionchanged:: 3.6 - Unknown escapes consisting of ``'\'`` and an ASCII letter now are errors. + Unknown escapes in *pattern* consisting of ``'\'`` and an ASCII letter + now are errors. + + .. deprecated-removed:: 3.5 3.7 + Unknown escapes in *repl* consist of ``'\'`` and ASCII letter now raise + a deprecation warning and will be forbidden in Python 3.7. .. function:: subn(pattern, repl, string, count=0, flags=0) diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst index 040a533..3c2ab12 100644 --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -2021,8 +2021,9 @@ API and Feature Removals ------------------------ * Unknown escapes consisting of ``'\'`` and an ASCII letter in - regular expressions will now cause an error. The :const:`re.LOCALE` - flag can now only be used with binary patterns. + regular expressions will now cause an error. In replacement templates for + :func:`re.sub` they are still allowed, but deprecated. + The :const:`re.LOCALE` flag can now only be used with binary patterns. * ``inspect.getmoduleinfo()`` was removed (was deprecated since CPython 3.3). :func:`inspect.getmodulename` should be used for obtaining the module diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py index ab37fd3..6aa49c3 100644 --- a/Lib/sre_parse.py +++ b/Lib/sre_parse.py @@ -947,7 +947,9 @@ def parse_template(source, pattern): this = chr(ESCAPES[this][1]) except KeyError: if c in ASCIILETTERS: - raise s.error('bad escape %s' % this, len(this)) + import warnings + warnings.warn('bad escape %s' % this, + DeprecationWarning, stacklevel=4) lappend(this) else: lappend(this) diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index 84131d2..4bdaa4b 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -126,7 +126,7 @@ class ReTests(unittest.TestCase): (chr(9)+chr(10)+chr(11)+chr(13)+chr(12)+chr(7)+chr(8))) for c in 'cdehijklmopqsuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ': with self.subTest(c): - with self.assertRaises(re.error): + with self.assertWarns(DeprecationWarning): self.assertEqual(re.sub('a', '\\' + c, 'a'), '\\' + c) self.assertEqual(re.sub(r'^\s*', 'X', 'test'), 'Xtest') @@ -26,6 +26,9 @@ Core and Builtins Library ------- +- Issue #27030: Unknown escapes in re.sub() replacement template are allowed + again. But they still are deprecated and will be disabled in 3.7. + - Issue #28835: Fix a regression introduced in warnings.catch_warnings(): call warnings.showwarning() if it was overriden inside the context manager. |