mirror of
https://github.com/python/cpython.git
synced 2025-10-19 16:03:42 +00:00
gh-131927: Prevent emitting optimizer warnings twice in the REPL (#131993)
This commit is contained in:
parent
d4e2cdc15b
commit
3d08c8ad20
5 changed files with 74 additions and 2 deletions
|
@ -1,6 +1,7 @@
|
|||
import contextlib
|
||||
import io
|
||||
import unittest
|
||||
import warnings
|
||||
from unittest.mock import patch
|
||||
from textwrap import dedent
|
||||
|
||||
|
@ -273,3 +274,28 @@ def test_incomplete_statement(self):
|
|||
code = "if foo:"
|
||||
console = InteractiveColoredConsole(namespace, filename="<stdin>")
|
||||
self.assertTrue(_more_lines(console, code))
|
||||
|
||||
|
||||
class TestWarnings(unittest.TestCase):
|
||||
def test_pep_765_warning(self):
|
||||
"""
|
||||
Test that a SyntaxWarning emitted from the
|
||||
AST optimizer is only shown once in the REPL.
|
||||
"""
|
||||
# gh-131927
|
||||
console = InteractiveColoredConsole()
|
||||
code = dedent("""\
|
||||
def f():
|
||||
try:
|
||||
return 1
|
||||
finally:
|
||||
return 2
|
||||
""")
|
||||
|
||||
with warnings.catch_warnings(record=True) as caught:
|
||||
warnings.simplefilter("default")
|
||||
console.runsource(code)
|
||||
|
||||
count = sum("'return' in a 'finally' block" in str(w.message)
|
||||
for w in caught)
|
||||
self.assertEqual(count, 1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue