diff --git a/test/failing_examples.py b/test/failing_examples.py index 386f590..a555fde 100644 --- a/test/failing_examples.py +++ b/test/failing_examples.py @@ -29,7 +29,6 @@ FAILING_EXAMPLES = [ 'from foo import a,', 'from __future__ import whatever', 'from __future__ import braces', - 'from .__future__ import whatever', 'def f(x=3, y): pass', 'lambda x=3, y: x', '__debug__ = 1', @@ -216,7 +215,6 @@ FAILING_EXAMPLES = [ 'f"{\'\\\'}"', 'f"{#}"', "f'{1!b}'", - "f'{1:{5:{3}}}'", "f'{'", "f'{'", "f'}'", @@ -411,3 +409,17 @@ if sys.version_info[:2] >= (3, 8): FAILING_EXAMPLES += [ "f'{1=!b}'", ] + +if sys.version_info[:2] < (3, 12): + FAILING_EXAMPLES += [ + # f-string expression part cannot include a backslash before 3.12 + r'''f"{'\n'}"''', + # this compiles successfully but fails when evaluated in 3.12 + "f'{1:{5:{3}}}'", + ] + +if sys.version_info[:2] < (3, 13): + # this compiles successfully but fails when evaluated in 3.13 + FAILING_EXAMPLES += [ + 'from .__future__ import whatever', + ] diff --git a/test/test_python_errors.py b/test/test_python_errors.py index 850f583..0c89016 100644 --- a/test/test_python_errors.py +++ b/test/test_python_errors.py @@ -105,7 +105,7 @@ def _get_actual_exception(code): # It's as simple as either an error or not. warnings.filterwarnings('ignore', category=SyntaxWarning) try: - compiled = compile(code, '', 'exec') + compile(code, '', 'exec') except (SyntaxError, IndentationError) as e: wanted = e.__class__.__name__ + ': ' + e.msg line_nr = e.lineno @@ -115,20 +115,7 @@ def _get_actual_exception(code): wanted = 'SyntaxError: (value error) ' + str(e) line_nr = None else: - # In Python 3.12+, some invalid f-strings compile OK but - # only raise an exception when they are evaluated. - try: - eval(compiled) - except ValueError as e: - wanted = 'SyntaxError: (value error) ' + str(e) - line_nr = None - except (ImportError, ModuleNotFoundError): - # This comes from 'from .__future__ import whatever' - # in Python 3.13+ - wanted = 'SyntaxError: future feature whatever is not defined' - line_nr = None - else: - assert False, "The piece of code should raise an exception." + assert False, "The piece of code should raise an exception." # SyntaxError # Some errors have changed error message in later versions of Python,