문제는 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