Python Glossary English

все Python 3sysфункция

sys.settrace()

отладка и трассировка

Устанавливает функцию трассировки: её вызывают на каждый вызов функции, строку, возврат и исключение. На этом построены pdb и coverage.

Синтаксис

sys.settrace(tracefunc)  # tracefunc(frame, event, arg)

Глобальная функция получает только событие 'call'; события 'line' придут, лишь если она вернёт локальную функцию трассировки (обычно саму себя) — вернула None, и строки этой функции не отслеживаются. Действует только на текущий поток и только на новые кадры, а программа под ней работает в разы медленнее. Выключают её sys.settrace(None), лучше в finally. Для своих инструментов с 3.12 есть более быстрый sys.monitoring.

Примеры

import sys
lines = []
def tracer(frame, event, arg):
    if event == 'call' and frame.f_code.co_name != 'square':
        return None
    if event == 'line':
        lines.append(frame.f_lineno - frame.f_code.co_firstlineno)
    return tracer
def square(n):
    r = n * n
    return r
sys.settrace(tracer)
try:
    square(3)
finally:
    sys.settrace(None)
print(lines)  # → [1, 2]
import sys
calls = []
def only_calls(frame, event, arg):
    calls.append(frame.f_code.co_name)
    return None
def f():
    return 1
sys.settrace(only_calls)
try:
    f()
    f()
finally:
    sys.settrace(None)
print(calls)  # → ['f', 'f']

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности