Pour mon objectif de journalisation, je veux enregistrer tous les noms des fonctions où mon code va
Peu importe qui appelle la fonction, je veux le nom de la fonction dans lequel je déclare cette ligne
import inspect
def whoami():
return inspect.stack()[1][3]
def foo():
print(whoami())
actuellement, il imprime foo
, je veux imprimer whoami
Vous voulez probablement inspect.getframeinfo(frame).function
:
import inspect
def whoami():
frame = inspect.currentframe()
return inspect.getframeinfo(frame).function
def foo():
print(whoami())
foo()
empreintes
whoami
Pour mon objectif de journalisation, je veux enregistrer tous les noms des fonctions où mon code va
Avez-vous considéré les décorateurs?
import functools
def logme(f):
@functools.wraps(f)
def wrapped(*args, **kwargs):
print(f.__name__)
return f(*args, **kwargs)
return wrapped
@logme
def myfunction();
print("Doing some stuff")
En fait, la réponse d'Eric indique le chemin à suivre s'il s'agit de logging :
Pour mon objectif de journalisation, je veux enregistrer tous les noms des fonctions où mon code va
Vous pouvez ajuster le formateur pour enregistrer le nom de la fonction :
import logging
def whoami():
logging.info("Now I'm there")
def foo():
logging.info("I'm here")
whoami()
logging.info("I'm back here again")
logging.basicConfig(
format="%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s",
level=logging.INFO)
foo()
empreintes
2015-10-16 16:29:34,227 [INFO] foo: I'm here
2015-10-16 16:29:34,227 [INFO] whoami: Now I'm there
2015-10-16 16:29:34,227 [INFO] foo: I'm back here again
Utilisez le membre f_code.co_name
du cadre de pile renvoyé par sys._getframe()
.
sys._getframe(0).f_code.co_name
Par exemple, dans une fonction whoami()
,
import sys
def whoami():
return sys._getframe(1).f_code.co_name
def func1():
print(whoami())
func1() # prints 'func1'