in odps/lib/tblib/__init__.py [0:0]
def as_traceback(self):
"""
Convert to a builtin Traceback object that is usable for raising or rendering a stacktrace.
"""
if not PY3:
if tproxy:
return tproxy(TracebackType, self.__tproxy__)
if not tb_set_next:
raise RuntimeError("Unsupported Python interpreter!")
current = self
top_tb = None
tb = None
while current:
f_code = current.tb_frame.f_code
code = compile(
"\n" * (current.tb_lineno - 1) + "raise __traceback_maker",
current.tb_frame.f_code.co_filename,
"exec",
)
if hasattr(code, "replace"):
# Python 3.8 and newer
code = code.replace(
co_argcount=0,
co_filename=f_code.co_filename,
co_name=f_code.co_name,
co_freevars=(),
co_cellvars=(),
)
elif PY3:
code = CodeType(
0,
code.co_kwonlyargcount,
code.co_nlocals,
code.co_stacksize,
code.co_flags,
code.co_code,
code.co_consts,
code.co_names,
code.co_varnames,
f_code.co_filename,
f_code.co_name,
code.co_firstlineno,
code.co_lnotab,
(),
(),
)
else:
code = CodeType(
0,
code.co_nlocals,
code.co_stacksize,
code.co_flags,
code.co_code,
code.co_consts,
code.co_names,
code.co_varnames,
f_code.co_filename.encode(),
f_code.co_name.encode(),
code.co_firstlineno,
code.co_lnotab,
(),
(),
)
# noinspection PyBroadException
try:
exec(
code,
dict(current.tb_frame.f_globals),
dict(current.tb_frame.f_locals),
) # noqa: S102
except Exception:
next_tb = sys.exc_info()[2].tb_next
if top_tb is None:
top_tb = next_tb
if tb is not None:
tb_set_next(tb, next_tb)
tb = next_tb
del next_tb
current = current.tb_next
try:
return top_tb
finally:
del top_tb
del tb