bpo-41520: codeop no longer ignores SyntaxWarning (GH-21838)

(cherry picked from commit 369a1cbdee)

Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
Miss Islington (bot) 2020-08-12 06:12:05 -07:00 committed by GitHub
parent 622d90f65c
commit afff51fc09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 2 deletions

View File

@ -84,9 +84,11 @@ def _maybe_compile(compiler, source, filename, symbol):
except SyntaxError as err:
pass
# Suppress warnings after the first compile to avoid duplication.
# Catch syntax warnings after the first compile
# to emit SyntaxWarning at most once.
with warnings.catch_warnings():
warnings.simplefilter("ignore")
warnings.simplefilter("error", SyntaxWarning)
try:
code1 = compiler(source + "\n", filename, symbol)
except SyntaxError as e:

View File

@ -3,6 +3,7 @@
Nick Mathewson
"""
import unittest
import warnings
from test import support
from codeop import compile_command, PyCF_DONT_IMPLY_DEDENT
@ -300,5 +301,11 @@ class CodeopTests(unittest.TestCase):
compile_command("0 is 0")
self.assertEqual(len(w.warnings), 1)
# bpo-41520: check SyntaxWarning treated as an SyntaxError
with self.assertRaises(SyntaxError):
warnings.simplefilter('error', SyntaxWarning)
compile_command('1 is 1\n', symbol='exec')
if __name__ == "__main__":
unittest.main()

View File

@ -0,0 +1 @@
Fix :mod:`codeop` regression: it no longer ignores :exc:`SyntaxWarning`.