web-dev-qa-db-fra.com

Comment obtenir le nom de la fonction courante dans cette fonction en python

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

9
John Kaff

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
20
user707650

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")
10
Eric

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
10
user707650

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'
2
JamesThomasMoon1979