Programming

Python의 다른 함수 내에서 호출자 함수 이름을 얻습니까?

procodes 2020. 8. 9. 10:31
반응형

Python의 다른 함수 내에서 호출자 함수 이름을 얻습니까? [복제]


다음과 같은 두 가지 기능이있는 경우 :

def A
def B

A가 B를 호출하면 B 내부에서 B를 호출하는 사람을 알 수 있습니다.

def A () :
    B ()

def B () :
    this.caller.name

inspect 모듈을 사용하여 원하는 정보를 얻을 수 있습니다 . 스택 방법은 프레임 기록의 목록을 반환합니다.

  • 들어 파이썬이 각 프레임 레코드 목록입니다. 각 레코드의 세 번째 요소는 발신자 이름입니다. 원하는 것은 다음과 같습니다.

    >>> import inspect
    >>> def f():
    ...     print inspect.stack()[1][3]
    ...
    >>> def g():
    ...     f()
    ...
    >>> g()
    g
    

  • 들어 파이썬 3.5 , 각 프레임 레코드는이다 라는 튜플 은 교체해야하므로

    print inspect.stack()[1][3]
    

    print(inspect.stack()[1].function)
    

    위의 코드에서.


sysinspect모듈을 사용하는 두 가지 방법이 있습니다 .

  • sys._getframe(1).f_code.co_name
  • inspect.stack()[1][3]

stack()형태는 덜 읽을 수 있으며 호출하기 때문에 구현 의존 sys._getframe()에서 추출 참조 inspect.py:

def stack(context=1):
    """Return a list of records for the stack above the caller's frame."""
    return getouterframes(sys._getframe(1), context)

참고 (2018 년 6 월) : 오늘은 아마도 inspect모듈을 사용하고 다른 답변을 볼 것입니다.

sys._getframe(1).f_code.co_name 아래 예와 같이 :

>>> def foo():
...  global x
...  x = sys._getframe(1)
...
>>> def y(): foo()
...
>>> y()
>>> x.f_code.co_name
'y'
>>>  

중요 참고 사항 : _getframe메서드 이름 (밑줄로 시작 함)에서 알 수 있듯이 무심코 의존해야하는 API 메서드가 아닙니다.


이것은 나를 위해 작동합니다! :디

>>> def a():
...     import sys
...     print sys._getframe(1).f_code.co_name
...
>>> def b():
...     a()
...
...
>>> b()
b
>>>

로깅 모듈을 사용하고 BaseConfig ()에서 % (funcName) s 옵션을 지정할 수 있습니다.

import logging
logging.basicConfig(filename='/tmp/test.log', level=logging.DEBUG, format='%(asctime)s | %(levelname)s | %(funcName)s |%(message)s')

def A():
    logging.info('info')

참고 URL : https://stackoverflow.com/questions/900392/getting-the-caller-function-name-inside-another-function-in-python

반응형