在另一个线程中处理异常

2 投票
1 回答
575 浏览
提问于 2025-04-15 17:09

在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))

撰写回答