mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-98401: Invalid escape sequences emits SyntaxWarning (#99011)
A backslash-character pair that is not a valid escape sequence now generates a SyntaxWarning, instead of DeprecationWarning. For example, re.compile("\d+\.\d+") now emits a SyntaxWarning ("\d" is an invalid escape sequence), use raw strings for regular expression: re.compile(r"\d+\.\d+"). In a future Python version, SyntaxError will eventually be raised, instead of SyntaxWarning. Octal escapes with value larger than 0o377 (ex: "\477"), deprecated in Python 3.11, now produce a SyntaxWarning, instead of DeprecationWarning. In a future Python version they will be eventually a SyntaxError. codecs.escape_decode() and codecs.unicode_escape_decode() are left unchanged: they still emit DeprecationWarning. * The parser only emits SyntaxWarning for Python 3.12 (feature version), and still emits DeprecationWarning on older Python versions. * Fix SyntaxWarning by using raw strings in Tools/c-analyzer/ and wasm_build.py.
This commit is contained in:
parent
916af11a97
commit
a60ddd31be
11 changed files with 69 additions and 29 deletions
|
@ -109,11 +109,11 @@ class TestLiterals(unittest.TestCase):
|
|||
for b in range(1, 128):
|
||||
if b in b"""\n\r"'01234567NU\\abfnrtuvx""":
|
||||
continue
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
with self.assertWarns(SyntaxWarning):
|
||||
self.assertEqual(eval(r"'\%c'" % b), '\\' + chr(b))
|
||||
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('always', category=DeprecationWarning)
|
||||
warnings.simplefilter('always', category=SyntaxWarning)
|
||||
eval("'''\n\\z'''")
|
||||
self.assertEqual(len(w), 1)
|
||||
self.assertEqual(str(w[0].message), r"invalid escape sequence '\z'")
|
||||
|
@ -121,7 +121,7 @@ class TestLiterals(unittest.TestCase):
|
|||
self.assertEqual(w[0].lineno, 1)
|
||||
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('error', category=DeprecationWarning)
|
||||
warnings.simplefilter('error', category=SyntaxWarning)
|
||||
with self.assertRaises(SyntaxError) as cm:
|
||||
eval("'''\n\\z'''")
|
||||
exc = cm.exception
|
||||
|
@ -133,11 +133,11 @@ class TestLiterals(unittest.TestCase):
|
|||
|
||||
def test_eval_str_invalid_octal_escape(self):
|
||||
for i in range(0o400, 0o1000):
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
with self.assertWarns(SyntaxWarning):
|
||||
self.assertEqual(eval(r"'\%o'" % i), chr(i))
|
||||
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('always', category=DeprecationWarning)
|
||||
warnings.simplefilter('always', category=SyntaxWarning)
|
||||
eval("'''\n\\407'''")
|
||||
self.assertEqual(len(w), 1)
|
||||
self.assertEqual(str(w[0].message),
|
||||
|
@ -146,7 +146,7 @@ class TestLiterals(unittest.TestCase):
|
|||
self.assertEqual(w[0].lineno, 1)
|
||||
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('error', category=DeprecationWarning)
|
||||
warnings.simplefilter('error', category=SyntaxWarning)
|
||||
with self.assertRaises(SyntaxError) as cm:
|
||||
eval("'''\n\\407'''")
|
||||
exc = cm.exception
|
||||
|
@ -186,11 +186,11 @@ class TestLiterals(unittest.TestCase):
|
|||
for b in range(1, 128):
|
||||
if b in b"""\n\r"'01234567\\abfnrtvx""":
|
||||
continue
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
with self.assertWarns(SyntaxWarning):
|
||||
self.assertEqual(eval(r"b'\%c'" % b), b'\\' + bytes([b]))
|
||||
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('always', category=DeprecationWarning)
|
||||
warnings.simplefilter('always', category=SyntaxWarning)
|
||||
eval("b'''\n\\z'''")
|
||||
self.assertEqual(len(w), 1)
|
||||
self.assertEqual(str(w[0].message), r"invalid escape sequence '\z'")
|
||||
|
@ -198,7 +198,7 @@ class TestLiterals(unittest.TestCase):
|
|||
self.assertEqual(w[0].lineno, 1)
|
||||
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('error', category=DeprecationWarning)
|
||||
warnings.simplefilter('error', category=SyntaxWarning)
|
||||
with self.assertRaises(SyntaxError) as cm:
|
||||
eval("b'''\n\\z'''")
|
||||
exc = cm.exception
|
||||
|
@ -209,11 +209,11 @@ class TestLiterals(unittest.TestCase):
|
|||
|
||||
def test_eval_bytes_invalid_octal_escape(self):
|
||||
for i in range(0o400, 0o1000):
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
with self.assertWarns(SyntaxWarning):
|
||||
self.assertEqual(eval(r"b'\%o'" % i), bytes([i & 0o377]))
|
||||
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('always', category=DeprecationWarning)
|
||||
warnings.simplefilter('always', category=SyntaxWarning)
|
||||
eval("b'''\n\\407'''")
|
||||
self.assertEqual(len(w), 1)
|
||||
self.assertEqual(str(w[0].message),
|
||||
|
@ -222,7 +222,7 @@ class TestLiterals(unittest.TestCase):
|
|||
self.assertEqual(w[0].lineno, 1)
|
||||
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('error', category=DeprecationWarning)
|
||||
warnings.simplefilter('error', category=SyntaxWarning)
|
||||
with self.assertRaises(SyntaxError) as cm:
|
||||
eval("b'''\n\\407'''")
|
||||
exc = cm.exception
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue