# -*- coding: utf-8 -*-
import inspect
"""
inspect.stack()
Devuelve una lista de registros de las llamadas. La primera entrada en la lista devuelta representa el llamador; La última entrada representa la llamada más externa en la pila.
"""
def miNombre():
return inspect.stack()[1][3]
def deDonde():
result=""
for i in range(2,len(inspect.stack())-1):
if result:
result+="|"
result+=inspect.stack()[i][3]
return result
def primera():
print("Estoy en la función '%s', ha sido llamada desde: %s" % (miNombre(), deDonde()))
segunda()
def segunda():
print("Estoy en la función '%s', ha sido llamada desde: %s" % (miNombre(), deDonde()))
tercera()
def tercera():
print("Estoy en la función '%s', ha sido llamada desde: %s" % (miNombre(), deDonde()))
primera()
segunda()
Fuente:
https://www.lawebdelprogramador.com/codigo/Python/3751-Obtener-el-nombre-de-la-funcion-donde-nos-encontramos-y-de-donde-es-llamada.html
En un módulo, puedes obtener el nombre del modulo con __name__, salvo que sea el primer módulo que te devuelve __main__
Por eso, para probar un modulo, al final, puedes colocar
if __name__ == "__main__":
# aqui va todo el código del test. Esto solo se ejecuta cuando se invoca...
# el modulo directamente y no desde otro programa
Saludos: Miguel