在另一个线程中处理异常
在Python中,如何“正确”地检测和处理另一个线程中的异常,尤其是当那个线程的代码不是你自己写的情况下?
举个例子,假设你设置了一个需要两个参数的函数作为threading.Thread
对象的目标,但在运行时你试图传递三个参数。这时,Thread
模块会在另一个线程中抛出异常,而你甚至还没来得及去捕捉它。
下面是一个示例代码:
def foo(p1,p2):
p1.do_something()
p2.do_something()
thread = threading.Thread(target=foo,args=(a,b,c))
thread.start()
这个异常是在另一个线程中抛出的。你该如何检测和处理这个异常呢?
1 个回答
3
我觉得你只能给你的目标函数加装饰器,或者是继承 threading.Thread 类来处理异常。
def safer( func ):
def safer(*args,**kwargs):
try:
return func(*args,**kwargs)
except Exception,e:
print "Couldn't call", func
# do_stuff( e )
return safer
thread = threading.Thread(target=safer(foo),args=(1,2,3))