私のロギング目的で、コードが入っている関数のすべての名前をログに記録したい
誰が関数を呼び出しているかは関係ありません。この行を宣言する関数名が必要です。
import inspect
def whoami():
return inspect.stack()[1][3]
def foo():
print(whoami())
現在はfoo
を出力します。whoami
を出力します
あなたはおそらく inspect.getframeinfo(frame).function
:
import inspect
def whoami():
frame = inspect.currentframe()
return inspect.getframeinfo(frame).function
def foo():
print(whoami())
foo()
プリント
whoami
私のロギング目的で、コードが入っている関数のすべての名前をログに記録したい
デコレーターを検討しましたか?
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")
実際、これがloggingの場合、Ericの回答は道を示しています。
私のロギング目的で、コードが入っている関数のすべての名前をログに記録したい
関数名 を記録するようにフォーマッタを調整できます。
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()
プリント
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
sys._getframe()
によって返されるスタックフレームの_f_code.co_name
_メンバーを使用します。
_sys._getframe(0).f_code.co_name
_
たとえば、whoami()
関数では、
_import sys
def whoami():
return sys._getframe(1).f_code.co_name
def func1():
print(whoami())
func1() # prints 'func1'
_