summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/Lib/lib2to3/fixes/fix_sys_exc.py
diff options
context:
space:
mode:
authormaxim-yurchuk <[email protected]>2024-10-09 12:29:46 +0300
committermaxim-yurchuk <[email protected]>2024-10-09 13:14:22 +0300
commit9731d8a4bb7ee2cc8554eaf133bb85498a4c7d80 (patch)
treea8fb3181d5947c0d78cf402aa56e686130179049 /contrib/tools/python3/Lib/lib2to3/fixes/fix_sys_exc.py
parenta44b779cd359f06c3ebbef4ec98c6b38609d9d85 (diff)
publishFullContrib: true for ydb
<HIDDEN_URL> commit_hash:c82a80ac4594723cebf2c7387dec9c60217f603e
Diffstat (limited to 'contrib/tools/python3/Lib/lib2to3/fixes/fix_sys_exc.py')
-rw-r--r--contrib/tools/python3/Lib/lib2to3/fixes/fix_sys_exc.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/contrib/tools/python3/Lib/lib2to3/fixes/fix_sys_exc.py b/contrib/tools/python3/Lib/lib2to3/fixes/fix_sys_exc.py
new file mode 100644
index 00000000000..f6039690374
--- /dev/null
+++ b/contrib/tools/python3/Lib/lib2to3/fixes/fix_sys_exc.py
@@ -0,0 +1,30 @@
+"""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"]
+ BM_compatible = True
+ 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.prefix)
+ attr = Attr(Name("sys"), call)
+ attr[1].children[0].prefix = results["dot"].prefix
+ attr.append(Subscript(index))
+ return Node(syms.power, attr, prefix=node.prefix)