Issue #27030: Unknown escapes in re.sub() replacement template are allowed
again. But they still are deprecated and will be disabled in 3.7.
This commit is contained in:
parent
b0f75c520e
commit
53c53ea4c5
|
@ -758,7 +758,12 @@ form.
|
||||||
Unmatched groups are replaced with an empty string.
|
Unmatched groups are replaced with an empty string.
|
||||||
|
|
||||||
.. versionchanged:: 3.6
|
.. 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)
|
.. function:: subn(pattern, repl, string, count=0, flags=0)
|
||||||
|
|
|
@ -2021,8 +2021,9 @@ API and Feature Removals
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
* Unknown escapes consisting of ``'\'`` and an ASCII letter in
|
* Unknown escapes consisting of ``'\'`` and an ASCII letter in
|
||||||
regular expressions will now cause an error. The :const:`re.LOCALE`
|
regular expressions will now cause an error. In replacement templates for
|
||||||
flag can now only be used with binary patterns.
|
: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).
|
* ``inspect.getmoduleinfo()`` was removed (was deprecated since CPython 3.3).
|
||||||
:func:`inspect.getmodulename` should be used for obtaining the module
|
:func:`inspect.getmodulename` should be used for obtaining the module
|
||||||
|
|
|
@ -947,7 +947,9 @@ def parse_template(source, pattern):
|
||||||
this = chr(ESCAPES[this][1])
|
this = chr(ESCAPES[this][1])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
if c in ASCIILETTERS:
|
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)
|
lappend(this)
|
||||||
else:
|
else:
|
||||||
lappend(this)
|
lappend(this)
|
||||||
|
|
|
@ -126,7 +126,7 @@ class ReTests(unittest.TestCase):
|
||||||
(chr(9)+chr(10)+chr(11)+chr(13)+chr(12)+chr(7)+chr(8)))
|
(chr(9)+chr(10)+chr(11)+chr(13)+chr(12)+chr(7)+chr(8)))
|
||||||
for c in 'cdehijklmopqsuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ':
|
for c in 'cdehijklmopqsuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ':
|
||||||
with self.subTest(c):
|
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('a', '\\' + c, 'a'), '\\' + c)
|
||||||
|
|
||||||
self.assertEqual(re.sub(r'^\s*', 'X', 'test'), 'Xtest')
|
self.assertEqual(re.sub(r'^\s*', 'X', 'test'), 'Xtest')
|
||||||
|
|
|
@ -26,6 +26,9 @@ Core and Builtins
|
||||||
Library
|
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():
|
- Issue #28835: Fix a regression introduced in warnings.catch_warnings():
|
||||||
call warnings.showwarning() if it was overriden inside the context manager.
|
call warnings.showwarning() if it was overriden inside the context manager.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue