home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- '''Fixer for except statements with named exceptions.
-
- The following cases will be converted:
-
- - "except E, T:" where T is a name:
-
- except E as T:
-
- - "except E, T:" where T is not a name, tuple or list:
-
- except E as t:
- T = t
-
- This is done because the target of an "except" clause must be a
- name.
-
- - "except E, T:" where T is a tuple or list literal:
-
- except E as t:
- T = t.args
- '''
- from import pytree
- from pgen2 import token
- from import fixer_base
- from fixer_util import Assign, Attr, Name, is_tuple, is_list
-
- def find_excepts(nodes):
- for i, n in enumerate(nodes):
- if isinstance(n, pytree.Node):
- if n.children[0].value == 'except':
- yield (n, nodes[i + 2])
-
- n.children[0].value == 'except'
-
-
-
- class FixExcept(fixer_base.BaseFix):
- PATTERN = "\n try_stmt< 'try' ':' suite\n cleanup=(except_clause ':' suite)+\n tail=(['except' ':' suite]\n ['else' ':' suite]\n ['finally' ':' suite]) >\n "
-
- def transform(self, node, results):
- syms = self.syms
- tail = [ n.clone() for n in results['tail'] ]
- try_cleanup = [ ch.clone() for ch in results['cleanup'] ]
- for except_clause, e_suite in find_excepts(try_cleanup):
- if len(except_clause.children) == 4:
- (E, comma, N) = except_clause.children[1:4]
- comma.replace(Name('as', prefix = ' '))
- if N.type != token.NAME:
- new_N = Name(self.new_name(), prefix = ' ')
- target = N.clone()
- target.set_prefix('')
- N.replace(new_N)
- new_N = new_N.clone()
- suite_stmts = e_suite.children
- for i, stmt in enumerate(suite_stmts):
- if isinstance(stmt, pytree.Node):
- break
- continue
- []
-
- for child in reversed(suite_stmts[:i]):
- e_suite.insert_child(0, child)
-
- e_suite.insert_child(i, assign)
- elif N.get_prefix() == '':
- N.set_prefix(' ')
-
- N.type != token.NAME
-
- children = [ c.clone() for c in node.children[:3] ] + try_cleanup + tail
- return pytree.Node(node.type, children)
-
-
-