%PDF- %PDF-
Direktori : /lib/python3/dist-packages/pythran/transformations/ |
Current File : //lib/python3/dist-packages/pythran/transformations/normalize_exception.py |
""" NormalizeException simplifies try blocks. """ from pythran.passmanager import Transformation import gast as ast class NormalizeException(Transformation): ''' Transform else statement in try except block in nested try except. >>> import gast as ast >>> from pythran import passmanager, backend >>> node = ast.parse("try:print('t')\\nexcept: print('x')\\n\ else: print('e')") >>> pm = passmanager.PassManager("test") >>> _, node = pm.apply(NormalizeException, node) >>> print(pm.dump(backend.Python, node)) try: print('t') try: print('e') except: pass except: print('x') ''' # FIXME : The transformation is incorrect. Else statement should propagate # exception def visit_Try(self, node): if node.orelse: node.body.append( ast.Try( node.orelse, [ast.ExceptHandler(None, None, [ast.Pass()])], [], [] ) ) node.orelse = [] self.update = True if node.finalbody: node.body.extend(node.finalbody) node.finalbody.append(ast.Raise(None, None)) self.update = True node = ast.Try( node.body, [ast.ExceptHandler(None, None, node.finalbody)], [], []) node.finalbody = [] return node