ปัญหาคือ 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