¿Hay alguna manera de encontrar qué función se llama función actual? Entonces, por ejemplo:Obtener función principal
def first():
second()
def second():
# print out here what function called this one
¿Alguna idea?
¿Hay alguna manera de encontrar qué función se llama función actual? Entonces, por ejemplo:Obtener función principal
def first():
second()
def second():
# print out here what function called this one
¿Alguna idea?
import inspect
def first():
return second()
def second():
return inspect.getouterframes(inspect.currentframe())[1]
first()[3] # 'first'
Puede usar la función extract_stack del módulo de rastreo.
import traceback
def first():
second()
def second():
print traceback.extract_stack(limit=2)[-2][2]
Estos funcionan bien para agregar rápidamente ayudas mínimas para la eliminación de errores where-am-I cuando no desea importar otro módulo. (CPython solamente, para depurar solamente.)
def LINE(back = 0):
return sys._getframe(back + 1).f_lineno
def FILE(back = 0):
return sys._getframe(back + 1).f_code.co_filename
def FUNC(back = 0):
return sys._getframe(back + 1).f_code.co_name
def WHERE(back = 0):
frame = sys._getframe(back + 1)
return "%s/%s %s()" % (os.path.basename(frame.f_code.co_filename),
frame.f_lineno, frame.f_code.co_name)
Ejemplo:
import sys, os # these you almost always have...
def WHERE(back = 0):
frame = sys._getframe(back + 1)
return "%s/%s %s()" % (os.path.basename(frame.f_code.co_filename),
frame.f_lineno, frame.f_code.co_name)
def first():
second()
def second():
print WHERE()
print WHERE(1)
first()
Salida:
$ python fs.py
fs.py/12 second()
fs.py/9 first()
@MikeG .: Queriendo esta información en un comunicado de la producción es malo, sí. Usarlo para depurar y comprender una pieza grande de Python está bien, en mi humilde opinión. –