Some more changes related to the new except syntax and semantics,
by Collin Winter.
diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py
index 55d2617..92eff6c 100644
--- a/Lib/compiler/pycodegen.py
+++ b/Lib/compiler/pycodegen.py
@@ -825,11 +825,33 @@
                 self.emit('POP_TOP')
             self.emit('POP_TOP')
             if target:
-                self.visit(target)
+                cleanup_body = self.newBlock()
+                cleanup_final = self.newBlock()
+                target_name = target[1]
+            
+                self.storeName(target_name)
+                self.emit('POP_TOP')
+                self.emit('SETUP_FINALLY', cleanup_final)
+                self.nextBlock(cleanup_body)
+                self.setups.push((TRY_FINALLY, cleanup_body))
+                self.visit(body)
+                self.emit('POP_BLOCK')
+                self.setups.pop()
+                self.emit('LOAD_CONST', None)
+                self.nextBlock(cleanup_final)
+                self.setups.push((END_FINALLY, cleanup_final))
+                
+                
+                self.emit('LOAD_CONST', None)
+                self.storeName(target_name)
+                self._implicitNameOp('DELETE', target_name)
+                
+                self.emit('END_FINALLY')
+                self.setups.pop()
             else:
                 self.emit('POP_TOP')
-            self.emit('POP_TOP')
-            self.visit(body)
+                self.emit('POP_TOP')
+                self.visit(body)
             self.emit('JUMP_FORWARD', end)
             if expr:
                 self.nextBlock(next)
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index 4a8e623..e111b61 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -988,16 +988,16 @@
         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' NAME]] */
                 if len(node) > 2:
-                    expr1 = self.com_node(node[2])
+                    expr = self.com_node(node[2])
                     if len(node) > 4:
-                        expr2 = self.com_assign(node[4], OP_ASSIGN)
+                        expr_name = node[4]
                     else:
-                        expr2 = None
+                        expr_name = None
                 else:
-                    expr1 = expr2 = None
-                clauses.append((expr1, expr2, self.com_node(nodelist[i+2])))
+                    expr = expr_name = None
+                clauses.append((expr, expr_name, self.com_node(nodelist[i+2])))
 
             if node[0] == token.NAME:
                 if node[1] == 'else':