多进程上的Python sys.excepthook

时间:2017-12-14 14:34:56

标签: python python-3.x error-handling

我正在尝试在多进程上设置自定义sys.excepthook。 但它不起作用。

在下面的代码中,我希望打印This is my traceback function:字符串作为错误消息的前缀,但它没有。

代码:

from multiprocessing import Process
import time
import traceback
import logging
import sys

def excepthook(etype, evalue, traceback):
    traceback_strs = traceback.format_exception_only(etype, evalue)
    exception_str = "This is my traceback function:" + "\r\n".join(traceback_strs)
    print("ExceptHook")
    print(exception_str)


def subprocess_main():
    sys.excepthook = excepthook
    time.sleep(3)
    raise Exception("HelloWorld")


if __name__ == "__main__":
    p = Process(target=subprocess_main)
    p.start()
    p.join()

为什么它不起作用?

OS:Windows10
Python:3.6.3

1 个答案:

答案 0 :(得分:2)

当存在未捕获的异常时调用sys.excepthook,但是Process有异常处理程序例程,它在您的钩子之前消耗了异常。 如果您仍想要自定义异常处理,则可以覆盖Process.run方法: class MyProcess(Process):     def run(self):         尝试:             超()。运行()         除例外:             excepthook(* sys.exc_info()) ps:原始函数的参数回溯除了阴影模块对象回溯,如果实际调用它将触发错误。