C'è un modo per trovare quale funzione si chiama la funzione corrente? Quindi per esempio:Funzione genitore
def first():
second()
def second():
# print out here what function called this one
Qualche idea?
C'è un modo per trovare quale funzione si chiama la funzione corrente? Quindi per esempio:Funzione genitore
def first():
second()
def second():
# print out here what function called this one
Qualche idea?
import inspect
def first():
return second()
def second():
return inspect.getouterframes(inspect.currentframe())[1]
first()[3] # 'first'
È possibile utilizzare la funzione extract_stack del modulo traceback.
import traceback
def first():
second()
def second():
print traceback.extract_stack(limit=2)[-2][2]
Queste funzionano bene per aggiungere rapidamente aiuti dove-sono-io debug minimo quando non si desidera importare un altro modulo. (Solo CPython, per il debug solo.)
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)
Esempio:
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()
uscita:
$ python fs.py
fs.py/12 second()
fs.py/9 first()
@MikeG .: Volendo queste informazioni in un rilascio di produzione è male, sì. Usarlo per eseguire il debug e capire che una grande parte di Python va bene, IMHO. –