cpython/Lib/lib2to3/fixes/fix_sys_exc.py
Benjamin Peterson cf60382420 Merged revisions 66117 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

................
  r66117 | benjamin.peterson | 2008-09-01 12:17:22 -0500 (Mon, 01 Sep 2008) | 25 lines

  Merged revisions 65887,65889,65967-65968,65981 via svnmerge from
  svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3

  ........
    r65887 | benjamin.peterson | 2008-08-19 17:45:04 -0500 (Tue, 19 Aug 2008) | 1 line

    allow the raw_input fixer to handle calls after the raw_input (ie. raw_input().split())
  ........
    r65889 | benjamin.peterson | 2008-08-19 18:11:03 -0500 (Tue, 19 Aug 2008) | 1 line

    no need for 2.4 compatibility now
  ........
    r65967 | benjamin.peterson | 2008-08-21 18:43:37 -0500 (Thu, 21 Aug 2008) | 1 line

    allow a Call to have no arguments
  ........
    r65968 | benjamin.peterson | 2008-08-21 18:45:13 -0500 (Thu, 21 Aug 2008) | 1 line

    add a fixer for sys.exc_info etc by Jeff Balogh #2357
  ........
    r65981 | benjamin.peterson | 2008-08-22 15:41:30 -0500 (Fri, 22 Aug 2008) | 1 line

    add a fixer to add parenthese for list and gen comps #2367
  ........
................
2008-09-01 19:56:06 +00:00

29 lines
1 KiB
Python

"""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())