Вы в основном хотите отследить, что произошло во время выполнения функции;Вы можете просто использовать trace
( подробнее здесь ), как показано ниже:
import sys
import trace
# create a Trace object, telling it what to ignore, and whether to
# do tracing or line-counting or both.
tracer = trace.Trace(
ignoredirs=[sys.prefix, sys.exec_prefix],
trace=0,
count=1)
def test():
if True:
if False:
print('one')
else:
print('two')
# run the new command using the given tracer
tracer.run('test()')
# make a report, placing output in the current directory
r = tracer.results()
r.write_results(show_missing=True, coverdir=".")
Вывод:
>>>>>> import sys
>>>>>> import trace
# create a Trace object, telling it what to ignore, and whether to
# do tracing or line-counting or both.
>>>>>> tracer = trace.Trace(
>>>>>> ignoredirs=[sys.prefix, sys.exec_prefix],
>>>>>> trace=0,
>>>>>> count=1)
>>>>>> def test():
if True:
if False:
print('here')
else:
1: print('here2')
# run the new command using the given tracer
>>>>>> tracer.run('test()')
# make a report, placing output in the current directory
>>>>>> r = tracer.results()
>>>>>> r.write_results(show_missing=True, coverdir=".")
Приведенное выше приведет к .cover
файл с результатами трассировки;или вам придется поиграться со строками и / или списком действий и использовать их в качестве выбранного пути.
Самый простой способ сделать это:
def function():
path = 'function'
if condition1:
path += '.condition1'
if condition2:
path += '.condition2'
else:
path += '.not(condition2)'
else:
path += '.not(condition1)'
Это пример;он не способен масштабироваться, но удовлетворит крошечную потребность.