- Why
Thread 中抛出的异常,无法在主线程中通过 try… except… 捕获。
class ExceptionThread(Thread):
def run(self):
self.exc = None
try:
if hasattr(self, '_Thread__target'):
# Thread uses name mangling prior to Python 3.
self.ret = self._Thread__target(*self._Thread__args, **self._Thread__kwargs)
else:
self.ret = self._target(*self._args, **self._kwargs)
except BaseException as e:
self.exc = e
def join(self):
Thread.join(self)
if self.exc:
raise self.exc
return self.ret