Порой требуется выяснить, кто именно вызвал конкретную функцию?
Конечно, можно запустить дебаг и выполнять построчно логику отслеживая откуда мы пришли в конкретную точку. Но это долго.
Чтобы просто узнать имя функции которая вызвала текущую функцию можно сделать так.
# myscript1.pyЗапускаем
import inspect
def function1():
# распечатаем имя вызывающей функции
print('Called from:', inspect.stack()[1][3])
def function2():
function1()
function2()
python3 myscript1.pyНо так мы увидим лишь имя предыдущей функции. А как узнать полный список вызовов?
Called from: function2
Traceback удобен тем, что показывает цепочку вызовов, которая привела к ошибке.
Но модуль traceback также позволяет распечатать стек вызовов не выбрасывая исключение.
# myscript2.pyЗапускаем файл
import traceback
def function1():
...
traceback.print_stack()
...
def function2():
function1()
function2()
python myscript2.py#tricks
File "myscript.py", line 9, in <module>
function2()
File "myscript.py", line 7, in function2
function1()
File "myscript.py", line 4, in function1
traceback.print_stack()