Browse Source
bpo-40807: Show warnings once from codeop._maybe_compile (#20486)
* bpo-40807: Show warnings once from codeop._maybe_compile
* Move catch_warnings
* news
Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
pull/20643/head
Cheryl Sabella
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
20 additions and
9 deletions
-
Lib/codeop.py
-
Lib/test/test_codeop.py
-
Misc/NEWS.d/next/Library/2020-06-04-16-25-15.bpo-40807.yYyLWx.rst
|
|
|
@ -57,6 +57,7 @@ Compile(): |
|
|
|
""" |
|
|
|
|
|
|
|
import __future__ |
|
|
|
import warnings |
|
|
|
|
|
|
|
_features = [getattr(__future__, fname) |
|
|
|
for fname in __future__.all_feature_names] |
|
|
|
@ -83,15 +84,18 @@ def _maybe_compile(compiler, source, filename, symbol): |
|
|
|
except SyntaxError: |
|
|
|
pass |
|
|
|
|
|
|
|
try: |
|
|
|
code1 = compiler(source + "\n", filename, symbol) |
|
|
|
except SyntaxError as e: |
|
|
|
err1 = e |
|
|
|
|
|
|
|
try: |
|
|
|
code2 = compiler(source + "\n\n", filename, symbol) |
|
|
|
except SyntaxError as e: |
|
|
|
err2 = e |
|
|
|
# Suppress warnings after the first compile to avoid duplication. |
|
|
|
with warnings.catch_warnings(): |
|
|
|
warnings.simplefilter("ignore") |
|
|
|
try: |
|
|
|
code1 = compiler(source + "\n", filename, symbol) |
|
|
|
except SyntaxError as e: |
|
|
|
err1 = e |
|
|
|
|
|
|
|
try: |
|
|
|
code2 = compiler(source + "\n\n", filename, symbol) |
|
|
|
except SyntaxError as e: |
|
|
|
err2 = e |
|
|
|
|
|
|
|
try: |
|
|
|
if code: |
|
|
|
|
|
|
|
@ -303,6 +303,11 @@ class CodeopTests(unittest.TestCase): |
|
|
|
self.assertNotEqual(compile_command("a = 1\n", "abc").co_filename, |
|
|
|
compile("a = 1\n", "def", 'single').co_filename) |
|
|
|
|
|
|
|
def test_warning(self): |
|
|
|
# Test that the warning is only returned once. |
|
|
|
with support.check_warnings((".*literal", SyntaxWarning)) as w: |
|
|
|
compile_command("0 is 0") |
|
|
|
self.assertEqual(len(w.warnings), 1) |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
unittest.main() |
|
|
|
@ -0,0 +1,2 @@ |
|
|
|
Stop codeop._maybe_compile, used by code.InteractiveInterpreter (and IDLE). |
|
|
|
from from emitting each warning three times. |