在另一个线程中处理异常

时间:2009-12-18 00:57:38

标签: python multithreading exception

当其他线程中的代码不在您的控制之下时,在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>

1 个答案:

答案 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))