我有一组想要在线程中执行的函数。其中一些函数可能会为每个线程分别引发我想要捕获的特定异常。
我尝试了一些类似的东西
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()