【发布时间】:2012-01-06 15:34:30
【问题描述】:
我正在尝试在线程中捕获异常并在主线程中重新引发它:
import threading
import sys
class FailingThread(threading.Thread):
def run(self):
try:
raise ValueError('x')
except ValueError:
self.exc_info = sys.exc_info()
failingThread = FailingThread()
failingThread.start()
failingThread.join()
print failingThread.exc_info
raise failingThread.exc_info[1]
这基本上有效并产生以下输出:
(<type 'exceptions.ValueError'>, ValueError('x',), <traceback object at 0x1004cc320>)
Traceback (most recent call last):
File "test.py", line 16, in <module>
raise failingThread.exc_info[1]
但是,异常的来源指向第 16 行,发生了重新引发。最初的异常来自第 7 行。我如何修改 main 线程以便输出显示为:
Traceback (most recent call last):
File "test.py", line 7, in <module>
【问题讨论】:
-
太棒了,我也一直在从其他线程重新提出异常,但从未达到你想要的程度:)
标签: python exception stack-trace