如何捕获 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__))
我正在尝试为我的代码编写一个很好的错误处理程序,这样当它失败时,日志、回溯和其他相关信息就会通过电子邮件发送给我。
我不知道如何获取异常对象并提取回溯。
我发现 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__))