Как правильно переопределить threading.excepthook в Python? - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь обработать необработанные исключения, возникающие при запуске потока. Документация python в документах. python .org гласит, что "threading.excepthook() может быть переопределено для управления обработкой необработанных исключений, вызванных Thread.run()". Тем не менее, я не могу сделать это правильно. Похоже, что моя функция excepthook никогда не выполняется. Как правильно это сделать?

import threading
import time

class MyThread(threading.Thread):
  def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)

  def excepthook(self, *args, **kwargs):
    print("In excepthook")

def error_soon(timeout):
  time.sleep(timeout)
  raise Exception("Time is up!")

my_thread = MyThread(target=error_soon, args=(3,))
my_thread.start()
time.sleep(7)

1 Ответ

0 голосов
/ 09 апреля 2020

threading.excepthook - это функция, принадлежащая модулю threading, а не метод класса threading.Thread, поэтому вместо нее следует переопределить threading.excepthook своей собственной функцией:

import threading
import time

def excepthook(args):
    print("In excepthook")

threading.excepthook = excepthook

class MyThread(threading.Thread):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

def error_soon(timeout):
    time.sleep(timeout)
    raise Exception("Time is up!")

my_thread = MyThread(target=error_soon, args=(3,))
my_thread.start()
time.sleep(7)
...