From 6290305e6722c20e17d3c73bd6a30c6448bead83 Mon Sep 17 00:00:00 2001 From: Collin Winter Date: Fri, 18 May 2007 23:11:24 +0000 Subject: [PATCH] Backport PEP 3110's new 'except' syntax to 2.6. --- Grammar/Grammar | 2 +- Lib/compiler/transformer.py | 2 +- Lib/test/test_grammar.py | 4 ++-- Misc/NEWS | 4 ++++ Python/ast.c | 2 +- Python/graminit.c | 5 +++-- 6 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Grammar/Grammar b/Grammar/Grammar index 83e50582fbc..cdfce69ac56 100644 --- a/Grammar/Grammar +++ b/Grammar/Grammar @@ -85,7 +85,7 @@ try_stmt: ('try' ':' suite with_stmt: 'with' test [ with_var ] ':' suite with_var: 'as' expr # NB compile.c makes sure that the default except clause is last -except_clause: 'except' [test [',' test]] +except_clause: 'except' [test [('as' | ',') test]] suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT # Backward compatibility cruft to support: diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py index ac23ad18a99..77ac7764bf0 100644 --- a/Lib/compiler/transformer.py +++ b/Lib/compiler/transformer.py @@ -930,7 +930,7 @@ class Transformer: for i in range(3, len(nodelist), 3): node = nodelist[i] if node[0] == symbol.except_clause: - # except_clause: 'except' [expr [',' expr]] */ + # except_clause: 'except' [expr [(',' | 'as') expr]] */ if len(node) > 2: expr1 = self.com_node(node[2]) if len(node) > 4: diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index 14ce7e49a81..51d77f2ef5e 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -600,7 +600,7 @@ hello world def testTry(self): ### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] ### | 'try' ':' suite 'finally' ':' suite - ### except_clause: 'except' [expr [',' expr]] + ### except_clause: 'except' [expr [('as' | ',') expr]] try: 1/0 except ZeroDivisionError: @@ -609,7 +609,7 @@ hello world pass try: 1/0 except EOFError: pass - except TypeError, msg: pass + except TypeError as msg: pass except RuntimeError, msg: pass except: pass else: pass diff --git a/Misc/NEWS b/Misc/NEWS index fabd5f436db..83f3da18abd 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,10 @@ What's New in Python 2.6 alpha 1? Core and builtins ----------------- +- except clauses may now be spelled either "except E, target:" or + "except E as target:". This is to provide forwards compatibility with + Python 3.0. + - Deprecate BaseException.message as per PEP 352. - Bug #1303614: don't expose object's __dict__ when the dict is diff --git a/Python/ast.c b/Python/ast.c index ace4950402e..27c3efaac87 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -2765,7 +2765,7 @@ ast_for_for_stmt(struct compiling *c, const node *n) static excepthandler_ty ast_for_except_clause(struct compiling *c, const node *exc, node *body) { - /* except_clause: 'except' [test [',' test]] */ + /* except_clause: 'except' [test [(',' | 'as') test]] */ REQ(exc, except_clause); REQ(body, suite); diff --git a/Python/graminit.c b/Python/graminit.c index 33ef64b8b7f..1f745042353 100644 --- a/Python/graminit.c +++ b/Python/graminit.c @@ -931,7 +931,8 @@ static arc arcs_42_1[2] = { {26, 2}, {0, 1}, }; -static arc arcs_42_2[2] = { +static arc arcs_42_2[3] = { + {78, 3}, {27, 3}, {0, 2}, }; @@ -944,7 +945,7 @@ static arc arcs_42_4[1] = { static state states_42[5] = { {1, arcs_42_0}, {2, arcs_42_1}, - {2, arcs_42_2}, + {3, arcs_42_2}, {1, arcs_42_3}, {1, arcs_42_4}, };