如何从多个线程捕获异常



我有一组想要在线程中执行的函数。其中一些函数可能会为每个线程分别引发我想要捕获的特定异常。

我尝试了一些类似的东西

import threading
class MyException(Exception):
pass
def fun():
raise MyException
myfuns = [threading.Thread(target=fun), threading.Thread(target=fun)]
for myfun in myfuns:
try:
myfun.start()
except MyException:
print("caught MyException")

我期望看到caught MyException两次,每个线程一次。但只有一个。

是否可以在线程中相互独立地捕获异常?(换句话说:当线程引发异常时,在调用线程的代码中管理它?(

对于Python 3.8+,您可以为未捕获的异常定义一个处理程序。

import threading
def f(args):
print(f'caught {args.exc_type} with value {args.exc_value} in thread {args.thread}n')

threading.excepthook = f
class MyException(Exception):
pass
def fun():
raise MyException
myfuns = [threading.Thread(target=fun), threading.Thread(target=fun)]
for myfun in myfuns:
myfun.start()
for myfun in myfuns:
myfun.join()

最新更新