summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Grammar/Grammar2
-rw-r--r--Lib/compiler/transformer.py2
-rw-r--r--Lib/test/test_grammar.py4
-rw-r--r--Misc/NEWS4
-rw-r--r--Python/ast.c2
-rw-r--r--Python/graminit.c5
6 files changed, 12 insertions, 7 deletions
diff --git a/Grammar/Grammar b/Grammar/Grammar
index 83e5058..cdfce69 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 ac23ad1..77ac776 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 14ce7e4..51d77f2 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 fabd5f4..83f3da1 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 ace4950..27c3efa 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 33ef64b..1f74504 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},
};