diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/lib2to3/fixes/fix_except.py | 13 | ||||
-rw-r--r-- | Lib/lib2to3/tests/test_all_fixers.py | 2 | ||||
-rwxr-xr-x | Lib/lib2to3/tests/test_fixers.py | 66 |
3 files changed, 75 insertions, 6 deletions
diff --git a/Lib/lib2to3/fixes/fix_except.py b/Lib/lib2to3/fixes/fix_except.py index 34281a0..5d6d153 100644 --- a/Lib/lib2to3/fixes/fix_except.py +++ b/Lib/lib2to3/fixes/fix_except.py @@ -37,15 +37,18 @@ class FixExcept(basefix.BaseFix): PATTERN = """ try_stmt< 'try' ':' suite - cleanup=((except_clause ':' suite)+ ['else' ':' suite] - ['finally' ':' suite] - | 'finally' ':' suite) > + cleanup=(except_clause ':' suite)+ + tail=(['except' ':' suite] + ['else' ':' suite] + ['finally' ':' suite]) > """ def transform(self, node, results): syms = self.syms - try_cleanup = [ch.clone() for ch in results['cleanup']] + 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] @@ -85,5 +88,5 @@ class FixExcept(basefix.BaseFix): N.set_prefix(" ") #TODO(cwinter) fix this when children becomes a smart list - children = [c.clone() for c in node.children[:3]] + try_cleanup + children = [c.clone() for c in node.children[:3]] + try_cleanup + tail return pytree.Node(node.type, children) diff --git a/Lib/lib2to3/tests/test_all_fixers.py b/Lib/lib2to3/tests/test_all_fixers.py index e8df320..c1da09e 100644 --- a/Lib/lib2to3/tests/test_all_fixers.py +++ b/Lib/lib2to3/tests/test_all_fixers.py @@ -27,7 +27,7 @@ class Options: class Test_all(support.TestCase): def setUp(self): - options = Options(fix=["all", "idioms", "ws_comma"], + options = Options(fix=["all", "idioms", "ws_comma", "buffer"], print_function=False) self.refactor = refactor.RefactoringTool(options) diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py index 585d628..c3308d6 100755 --- a/Lib/lib2to3/tests/test_fixers.py +++ b/Lib/lib2to3/tests/test_fixers.py @@ -681,6 +681,72 @@ class Test_except(FixerTestCase): pass""" self.check(b, a) + def test_bare_except(self): + b = """ + try: + pass + except Exception, a: + pass + except: + pass""" + + a = """ + try: + pass + except Exception as a: + pass + except: + pass""" + self.check(b, a) + + def test_bare_except_and_else_finally(self): + b = """ + try: + pass + except Exception, a: + pass + except: + pass + else: + pass + finally: + pass""" + + a = """ + try: + pass + except Exception as a: + pass + except: + pass + else: + pass + finally: + pass""" + self.check(b, a) + + def test_multi_fixed_excepts_before_bare_except(self): + b = """ + try: + pass + except TypeError, b: + pass + except Exception, a: + pass + except: + pass""" + + a = """ + try: + pass + except TypeError as b: + pass + except Exception as a: + pass + except: + pass""" + self.check(b, a) + # These should not be touched: def test_unchanged_1(self): |