当其他线程中的代码不在您的控制之下时,在Python中的另一个线程中检测和处理异常的“正确”方法是什么?
例如,假设您设置了一个函数,该函数需要2个参数作为threading.Thread
对象的目标,但在运行时尝试传递它3. Thread
模块将在另一个线程上抛出异常在你甚至试图抓住之前。
示例代码:
def foo(p1,p2):
p1.do_something()
p2.do_something()
thread = threading.Thread(target=foo,args=(a,b,c))
thread.start()
在另一个线程上引发异常。你会如何发现和处理它?</ p>
答案 0 :(得分: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))