কম্পিউটার টিউটোরিয়াল

পাইথনে থ্রেডের এক্সসেপশন কলার থ্রেডে ক্যাচ করা


সমস্যাটি হলো thread_obj.start() তাৎক্ষণিক রিটার্ন করে। আপনি যে চাইল্ড থ্রেড শুরু করেছেন সেটি নিজস্ব কনটেক্স্টে, নিজস্ব স্ট্যাকে এক্সিকিউট হয়। সেখানে~Occur করা যেকোনো এক্সসেপশন চাইল্ড থ্রেডের কনটেক্স্টে থাকে। আপনাকে এই ইনফরমেশন প্যারেন্ট থ্রেডে কোনো মেসেজ পাস করে কমিউনিকেট করতে হবে।

কোডটি নিচেরভাবে রি-রাইট করা যায়:

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
  1. পাইথনে OverflowError এক্সসেপশন ক্যাচ করা

  2. পাইথনে ArithmeticError এক্সসেপশন ক্যাচ করা

  3. পাইথনে IOError এক্সসেপশন ক্যাচ করা

  4. পাইথনে KeyError এক্সসেপশন ক্যাচ করা