traceback.print_stack() 使用 IPython 的 ultratb

traceback.print_stack() using IPython's ultratb

出于 debugging/logging 目的,我想将完整堆栈写入文件(例如 this question). I can do this using traceback.format_stack(). However, I would like it to look like the more verbose tracebacks that IPython outputs, for example, formatting with IPython.core.ultratb.VerboseTB.

类 和 IPython.core.ultratb 中的方法似乎需要有关异常的信息,因为它们是为回溯设计的。但我也不例外:我只是想以冗长的方式显示堆栈。

如何使用IPython.core.ultratb.VerboseTB的输出方法来格式化traceback.extract_stack() or inspect.stack()报告的堆栈?

import IPython.core.ultratb
import sys

try:
    1/0
except Exception as exc:
    tb = IPython.core.ultratb.VerboseTB()
    print(tb.text(*sys.exc_info()))

# --------------------------------------------------------------------------
# ZeroDivisionError                         Traceback (most recent call last)
# <ipython-input-8-725405cc4e58> in <module>()
#       1 try:
# ----> 2     1/0
#       3 except Exception as exc:
#       4     tb = IPython.core.ultratb.VerboseTB()
#       5     print(tb.text(*sys.exc_info()))
# 
# ZeroDivisionError: division by zero