diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py index 07a4c3287c9..dca904cb63d 100644 --- a/Lib/test/test_parser.py +++ b/Lib/test/test_parser.py @@ -235,6 +235,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 828621292d0..f93f5a9e7c4 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -20,6 +20,7 @@ Library - Issue #9075: In the ssl module, remove the setting of a ``debug`` flag on an OpenSSL structure. +- Issue #9125: Add recognition of 'except ... as ...' syntax to parser module. What's New in Python 2.7 release candidate 2? ============================================= diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index c36fcb07193..5d1bfb6674e 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); }