Как узнать кто вызвал функцию?
Порой требуется выяснить, кто именно вызвал конкретную функцию?
Конечно, можно запустить дебаг и выполнять построчно логику отслеживая откуда мы пришли в конкретную точку. Но это долго.
Чтобы просто узнать имя функции которая вызвала текущую функцию можно сделать так.
# 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
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()
#tricks