gpt4 book ai didi

python - 无法覆盖 sys.excepthook

转载 作者:太空狗 更新时间:2023-10-29 19:32:34 25 4
gpt4 key购买 nike

我尝试自定义 sys.excepthook 的行为,如 the recipe 所述.

在 ipython 中:

:import pdb, sys, traceback
:def info(type, value, tb):
: traceback.print_exception(type, value, tb)
: pdb.pm()
:sys.excepthook = info
:--
>>> x[10] = 5
-------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
NameError: name 'x' is not defined
>>>

pdb.pm() 未被调用。 sys.excepthook = info 似乎在我的 python 2.5 安装中不起作用。

最佳答案

在你写这篇文章五年后,IPython 仍然以这种方式工作,所以我想一个解决方案可能对谷歌搜索这个的人有用。

每次您执行一行代码时,IPython 都会替换 sys.excepthook,因此您对 sys.excepthook 的覆盖无效。此外,IPython 甚至不调用 sys.excepthook,它会捕获所有异常并在事情发展到这一步之前自行处理它们。

要在 IPython 运行时覆盖异常处理程序,您可以在其 shell 的 showtraceback 方法上进行 monkeypatch。例如,下面是我如何重写以提供看起来像普通 Python 回溯的方法(因为我不喜欢 IPython 的冗长):

def showtraceback(self, *args, **kwargs):
traceback_lines = traceback.format_exception(*sys.exc_info())
del traceback_lines[1]
message = ''.join(traceback_lines)
sys.stderr.write(message)

import sys
import traceback
import IPython
IPython.core.interactiveshell.InteractiveShell.showtraceback = showtraceback

这适用于普通终端控制台和 Qt 控制台。

关于python - 无法覆盖 sys.excepthook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1261668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com