我可以捕获并转储一个异常(和相应的堆栈跟踪),这会导致程序崩溃而不执行以下操作:
try:
# whole program
except Execption as e:
dump(e)
raise
Run Code Online (Sandbox Code Playgroud)
有时外部库崩溃了,我想对Python死亡做出反应并记录它的原因.我不想阻止Exception崩溃程序,我只想要调试信息.
就像是:
signals.register('dying', callback)
def callback(context):
# dumping the exception and
# stack trace from here
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
Mar*_*ers 12
是的,通过注册sys.excepthook()功能:
import sys
def myexcepthook(type, value, tb):
dump(type, value, tb)
sys.excepthook = myexcepthook
Run Code Online (Sandbox Code Playgroud)
这将替换默认钩子,它会将回溯打印到stderr.每当引发未捕获的异常时都会调用它,并且解释器即将退出.
如果要从自定义挂钩重用原始异常挂钩,请调用sys.__excepthook__:
def myexcepthook(type, value, tb):
dump(type, value, tb)
sys.__excepthook__(type, value, tb)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |