diff --git a/Lib/ast.py b/Lib/ast.py index 4e2ae859245f99..ebf4529f79b060 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -42,7 +42,8 @@ def parse(source, filename='', mode='exec', *, flags |= PyCF_TYPE_COMMENTS if isinstance(feature_version, tuple): major, minor = feature_version # Should be a 2-tuple. - assert major == 3 + if major != 3: + raise ValueError(f"Unsupported major version: {major}") feature_version = minor elif feature_version is None: feature_version = -1 diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 480089aa8af448..16f92a7c84d2a2 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -756,6 +756,12 @@ def test_assignment_expression_feature_version(self): with self.assertRaises(SyntaxError): ast.parse('(x := 0)', feature_version=(3, 7)) + def test_invalid_major_feature_version(self): + with self.assertRaises(ValueError): + ast.parse('pass', feature_version=(2, 7)) + with self.assertRaises(ValueError): + ast.parse('pass', feature_version=(4, 0)) + def test_constant_as_name(self): for constant in "True", "False", "None": expr = ast.Expression(ast.Name(constant, ast.Load())) diff --git a/Misc/NEWS.d/next/Library/2022-07-20-22-49-48.gh-issue-95066.TuCu0E.rst b/Misc/NEWS.d/next/Library/2022-07-20-22-49-48.gh-issue-95066.TuCu0E.rst new file mode 100644 index 00000000000000..05ae4a6a2761af --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-07-20-22-49-48.gh-issue-95066.TuCu0E.rst @@ -0,0 +1 @@ +Replaced assert with exception in :func:`ast.parse`, when ``feature_version`` has an invalid major version. Patch by Shantanu Jain.