如何捕获 python 异常并将回溯文本保存为字符串

How to catch python exception and save traceback text as string

我正在尝试为我的代码编写一个很好的错误处理程序,这样当它失败时,日志、回溯和其他相关信息就会通过电子邮件发送给我。

我不知道如何获取异常对象并提取回溯。

我发现 traceback 模块非常混乱,主要是因为它根本不处理异常。它只是从某个地方获取一些全局变量,假设我想要最新的异常。但如果我不这样做呢?如果我想忽略错误处理程序中的某些异常怎么办? (例如,如果我发送电子邮件失败并想重试。)

我想要的

import traceback as tb

# some function that will fail after a few recursions
def myfunc(x):
   assert x > 0, "oh no"
   return myfunc(x-1)

try:
    myfunc(3)
except Exception as e:
    traceback_str = tb.something(e)

请注意 tb.something e 作为参数

Stack Overflow 上有很多关于使用 traceback 模块获取回溯字符串的问题。这个问题的独特之处在于如何从捕获的异常中获取它,而不是全局变量。

结果:

traceback_str 包含字符串:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in myfunc
  File "<stdin>", line 3, in myfunc
  File "<stdin>", line 3, in myfunc
  File "<stdin>", line 2, in myfunc
AssertionError: oh no

请注意,它不仅包含最近的函数调用,还包含整个堆栈,并在末尾包含“AssertionError”

tb.something(e) 的正确函数是

''.join(tb.format_exception(None, e, e.__traceback__))