समस्या यह है कि 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