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