KiY*_*ter 7 python error-handling python-3.x
我正在尝试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()
Run Code Online (Sandbox Code Playgroud)
为什么它不起作用?
操作系统:Windows10
Python:3.6.3
geo*_*xsh 11
sys.excepthook在有未捕获的异常时调用,但Process 具有异常处理程序例程,它在您的钩子之前消耗了异常。
如果你仍然想要自定义异常处理,你可以重写Process.run方法:
class MyProcess(Process):
def run(self):
try:
super().run()
except Exception:
excepthook(*sys.exc_info())
Run Code Online (Sandbox Code Playgroud)
ps:traceback你的原始函数的参数excepthook隐藏了模块对象traceback,如果它被实际调用,它会触发一个错误。
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |