首页 > 解决方案 > sys.excepthook 不返回异常

问题描述

我正在尝试记录未处理的异常,但我似乎无法让“sys.excepthook”正常运行。代码似乎运行没有错误,但它什么也没做。谢谢。

我已经尝试将它记录到文件中,意识到我的日志记录代码确实有效,所以将它切换到不同的代码只是为了看看我是否可以测试 sys.excepthook。

import sys

def handleException(excType, value, traceback):
    print('work plz')

sys.excepthook = handleException
raise RuntimeError("Test unhandled")

或者

import sys

def handleException(excType, value, traceback):
    print('work plz')

sys.excepthook = handleException
c = "a" + 2

返回

Traceback (most recent call last):
  File "C:/Users/x/Desktop/python/marketing/3/log_test.py", line 7, in <module>
    raise RuntimeError("Test unhandled")
RuntimeError: Test unhandled

我期待有“工作请”

编辑:这似乎是 IDLE 的一个问题,如果我直接运行程序并尝试登录到文件它可以工作,但是如果我尝试通过 IDLE 运行它它不会。这很奇怪,但我想是固定的。

标签: python-3.x

解决方案


IPython 不支持sys.excepthook拦截异常的方式。也许您可以尝试以下方式。

class ExceptionHandler(object):
    def __init__(self):
        ...

    def __call__(self, *exception_info):
        """Handles exceptions"""
        ...

    def as_ipython_handler(self):
        def handle_ipython(shell, exception_type, value, tb, tb_offset=None):
            # shell.showtraceback((exception_type, value, tb), tb_offset=tb_offset)
            self(exception_type, value, tb)
            return traceback.format_tb(tb)

        return handle_ipython



try:
    # print("ipython_shell")
    ipython_shell = get_ipython() # only work on ipython
    ipython_shell.set_custom_exc((Exception,), ExceptionHandler().as_ipython_handler())
except NameError as e:
    # print("console")
    sys.excepthook = ExceptionHandler()

推荐阅读