fal*_*ets 7 python error-handling exception 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)
Run Code Online (Sandbox Code Playgroud)
请注意,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
Run Code Online (Sandbox Code Playgroud)
请注意,它不仅包含最近的函数调用,还包含整个堆栈,并在末尾包含“AssertionError”
fal*_*ets 20
正确的函数tb.something(e)是
''.join(tb.format_exception(None, e, e.__traceback__))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |