Python Glossary English

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Сообщить о неточности