如何在 Python 中在呼叫執行緒中捕獲執行緒的異常?


問題在於 thread_obj.start() 會立即返回。你啟動的子執行緒在其自己的上下文中執行,在自己的棧中執行。在那裡發生的任何異常都在子執行緒的上下文中。你必須透過傳遞一些訊息將此資訊傳達給父執行緒。

程式碼可以重新編寫如下

import sys
import threading
import Queue
class ExcThread(threading.Thread):
def __init__(self, foo):
threading.Thread.__init__(self)
self.foo = foo
def run(self):
try:
raise Exception('An error occurred here.')
except Exception:
self.foo.put(sys.exc_info())
def main():
foo = Queue.Queue()
thread_obj = ExcThread(foo)
thread_obj.start()
while True:
try:
exc = foo.get(block=False)
except Queue.Empty:
pass
else:
exc_type, exc_obj, exc_trace = exc
print exc_type, exc_obj
print exc_trace
thread_obj.join(0.1)
if thread_obj.isAlive():
continue

更新時間:2019 年 9 月 27 日

615 次瀏覽

開啟你的職業生涯

完成本課程,獲得認證

開始
廣告