Computer >> Máy Tính >  >> Lập trình >> Python

Làm cách nào để bắt ngoại lệ của một luồng trong luồng người gọi trong Python?

Vấn đề là thread_obj.start () trả về ngay lập tức. Luồng con mà bạn đã bắt đầu thực thi trong ngữ cảnh riêng của nó, trong ngăn xếp của chính nó. Bất kỳ ngoại lệ nào xảy ra ở đó đều nằm trong ngữ cảnh của chuỗi con. Bạn phải truyền thông tin này tới chuỗi chính bằng cách chuyển một số thông báo.

Đoạn mã có thể được viết lại như sau:

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