mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-96052: codeop: fix handling compiler warnings in incomplete input (GH-96132)
Previously codeop.compile_command() emitted compiler warnings (SyntaxWarning or
DeprecationWarning) and raised a SyntaxError for incomplete input containing
a potentially incorrect code. Now it always returns None for incomplete input
without emitting any warnings.
(cherry picked from commit 426d72e7dd
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
4d1de87042
commit
a386d1341c
3 changed files with 37 additions and 13 deletions
|
@ -321,6 +321,26 @@ class CodeopTests(unittest.TestCase):
|
|||
warnings.simplefilter('error', SyntaxWarning)
|
||||
compile_command('1 is 1', symbol='exec')
|
||||
|
||||
# Check DeprecationWarning treated as an SyntaxError
|
||||
with warnings.catch_warnings(), self.assertRaises(SyntaxError):
|
||||
warnings.simplefilter('error', DeprecationWarning)
|
||||
compile_command(r"'\e'", symbol='exec')
|
||||
|
||||
def test_incomplete_warning(self):
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('always')
|
||||
self.assertIncomplete("'\\e' + (")
|
||||
self.assertEqual(w, [])
|
||||
|
||||
def test_invalid_warning(self):
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('always')
|
||||
self.assertInvalid("'\\e' 1")
|
||||
self.assertEqual(len(w), 1)
|
||||
self.assertEqual(w[0].category, DeprecationWarning)
|
||||
self.assertRegex(str(w[0].message), 'invalid escape sequence')
|
||||
self.assertEqual(w[0].filename, '<input>')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue