在主线程中的线程中引发未处理的异常? [复制]

2024-04-06

有一些类似的问题,但没有一个提供我需要的答案。

如果我通过创建线程threading.Thread,然后抛出未处理的异常,这些线程将被终止。我希望保留异常详细信息与堆栈跟踪的默认打印,但也关闭整个过程。

我认为可能可以捕获线程中的所有异常,并在主线程对象上重新引发它们,或者可能可以手动执行默认异常处理,然后引发SystemExit在主线程上。

解决这个问题的最佳方法是什么?


我写过关于在Python中重新抛出异常 http://nedbatchelder.com/blog/200711/rethrowing_exceptions_in_python.html,包括非常类似的例子。

在工作线程上执行此操作(Python 3.x,请参阅下面的 Python 2.x 版本):

try:
    self.result = self.do_something_dangerous()
except Exception as e:
    import sys
    self.exc_info = sys.exc_info()

在你的主线程上:

if self.exc_info:
    raise self.exc_info[1].with_traceback(self.exc_info[2])
return self.result

Python 2.x:

try:
    self.result = self.do_something_dangerous()
except Exception, e:
    import sys
    self.exc_info = sys.exc_info()

在你的主线程上你这样做:

if self.exc_info:
    raise self.exc_info[1], None, self.exc_info[2]
return self.result

异常将出现在主线程中,就像在工作线程中引发一样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在主线程中的线程中引发未处理的异常? [复制] 的相关文章

随机推荐