Python 3.8+threadingпонятие
threading.ExceptHookArgs
ошибки в потоках
Тип аргумента, который получает threading.excepthook: последовательность с полями exc_type, exc_value, exc_traceback и thread.
Синтаксис
def hook(args): args.exc_type, args.exc_value, args.exc_traceback, args.thread
Создавать его самому не нужно — объект приходит в ваш хук. Поля exc_value, exc_traceback и thread могут оказаться None, так что проверяйте их перед использованием. Не сохраняйте args.exc_value или args.thread после выхода из хука: получится цикл ссылок или «оживление» удаляемого потока — копируйте нужное (имя потока, текст ошибки). Это структурная последовательность, а не namedtuple: у неё нет _fields, а конструктор принимает одну последовательность из четырёх элементов.
Примеры
import threading
seen = []
def hook(args):
seen.append(type(args) is threading.ExceptHookArgs)
seen.append((args.exc_type.__name__, str(args.exc_value), args.thread.name))
threading.excepthook = hook
def job():
raise ValueError('bad data')
t = threading.Thread(target=job, name='worker')
t.start()
t.join()
print(seen) # → [True, ('ValueError', 'bad data', 'worker')]
import threading
args = threading.ExceptHookArgs((KeyError, KeyError('x'), None, None))
print(args.exc_type.__name__, args.thread) # → KeyError None
print(len(args)) # → 4
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности