diff options
Diffstat (limited to 'Lib/lib2to3/fixes/fix_sys_exc.py')
-rw-r--r-- | Lib/lib2to3/fixes/fix_sys_exc.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Lib/lib2to3/fixes/fix_sys_exc.py b/Lib/lib2to3/fixes/fix_sys_exc.py new file mode 100644 index 0000000..18d9363 --- /dev/null +++ b/Lib/lib2to3/fixes/fix_sys_exc.py @@ -0,0 +1,29 @@ +"""Fixer for sys.exc_{type, value, traceback} + +sys.exc_type -> sys.exc_info()[0] +sys.exc_value -> sys.exc_info()[1] +sys.exc_traceback -> sys.exc_info()[2] +""" + +# By Jeff Balogh and Benjamin Peterson + +# Local imports +from .. import fixer_base +from ..fixer_util import Attr, Call, Name, Number, Subscript, Node, syms + +class FixSysExc(fixer_base.BaseFix): + # This order matches the ordering of sys.exc_info(). + exc_info = ["exc_type", "exc_value", "exc_traceback"] + PATTERN = """ + power< 'sys' trailer< dot='.' attribute=(%s) > > + """ % '|'.join("'%s'" % e for e in exc_info) + + def transform(self, node, results): + sys_attr = results["attribute"][0] + index = Number(self.exc_info.index(sys_attr.value)) + + call = Call(Name("exc_info"), prefix=sys_attr.get_prefix()) + attr = Attr(Name("sys"), call) + attr[1].children[0].set_prefix(results["dot"].get_prefix()) + attr.append(Subscript(index)) + return Node(syms.power, attr, prefix=node.get_prefix()) |