diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py index 23f418ee395..ca5f43fa9a7 100644 --- a/Lib/test/test_parser.py +++ b/Lib/test/test_parser.py @@ -210,6 +210,12 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase): self.check_suite("try: pass\nexcept: pass\nelse: pass\n" "finally: pass\n") + def test_except_clause(self): + self.check_suite("try: pass\nexcept: pass\n") + self.check_suite("try: pass\nexcept A: pass\n") + self.check_suite("try: pass\nexcept A, e: pass\n") + self.check_suite("try: pass\nexcept A as e: pass\n") + def test_position(self): # An absolutely minimal test of position information. Better # tests would be a big project. diff --git a/Misc/NEWS b/Misc/NEWS index 9bbd19f282c..bb74536df4d 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -73,6 +73,8 @@ C-API Library ------- +- Issue #9125: Add recognition of 'except ... as ...' syntax to parser module. + - Issue #9085: email package version number bumped to its correct value of 4.0.2 (same as it was in 2.5). diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 425d97f6bfa..365ec901df1 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -2126,10 +2126,13 @@ validate_except_clause(node *tree) if (res && (nch > 1)) res = validate_test(CHILD(tree, 1)); - if (res && (nch == 4)) - res = (validate_comma(CHILD(tree, 2)) - && validate_test(CHILD(tree, 3))); - + if (res && (nch == 4)) { + if (TYPE(CHILD(tree, 2)) == NAME) + res = validate_name(CHILD(tree, 2), "as"); + else + res = validate_comma(CHILD(tree, 2)); + res = res && validate_test(CHILD(tree, 3)); + } return (res); }