python-主线程内捕获子线程异常

方法:重写Thread类,在类中添加一个flag判断子线程是否出现异常

import threading
import traceback


class ExcThread(threading.Thread):
    def __init__(self, target, args, kwargs):
        super(ExcThread, self).__init__()
        self.function = target
        self.args = args
        self.kwargs = kwargs
        self.exit_code = 0  #添加一个flag标记,由于判断子线程是否出错
        self.exception = None 
        self.exc_traceback = ''
    def run(self):
        try:
            self._run()
        except Exception as e:
            self.exit_code = 1
            self.exception = e
            self.exc_traceback = traceback.format_exc()

    def _run(self):
        try:
            self.function(*self.args, **self.kwargs)
        except Exception as e:
            raise e


def num(i):
    if i > 10:
        raise EOFError("abc")
    print(i)

error_info = ""
thread_fool = []
for i in range(8, 13):
    t = ExcThread(target=num, args=(i,), kwargs={})
    thread_fool.append(t)
for t in thread_fool:
    t.start()
for t in thread_fool:
    t.join()
    if t.exit_code != 0:
        print(t.exc_traceback)
        print("MYfileERROR:",t.exception)

 

posted @ 2021-09-28 10:44  一笔一划82  阅读(409)  评论(0)    收藏  举报