2012-03-30 6 views
3

:inspect.currentframe()이 일부 구현에서 작동하지 않을 수 있습니까? <a href="http://docs.python.org/library/inspect.html?highlight=currentframe#inspect.currentframe" rel="nofollow">docs</a>에 따르면

inspect.currentframe()

돌아 발신자의 스택 프레임의 프레임 객체입니다.

CPython 구현 세부 정보 :이 함수는 인터프리터에서 파이썬 스택 프레임 지원을 사용합니다. 이는 Python의 모든 구현에 존재한다는 보장은 없습니다. 파이썬 스택 프레임 지원이없는 구현에서 실행되는 경우이 함수는 없음을 반환합니다.

이 기능 만 "구현에 종속적"으로 표시되는 것은 어떻습니까? 이 기능이 작동하지 않으면 inspect.trace, inspect.stack 등과 같은 유사한 기능을 사용할 수 없습니까?

또한 "스택 프레임 지원"은 무엇을 의미하며, 그 이유는 무엇입니까?

답변

2

나 자신을 찾고있는 동안이 질문에 넘어 섰다. inspect.currentframe의 가용성 sys._getframe 연관되어

def currentframe(): 
    """Return the frame of the caller or None if this is not possible.""" 
    return sys._getframe(1) if hasattr(sys, "_getframe") else None 

대한 제한이 이와 같은 sys._getframe을 사용하는 모든 다른 기능에 적용된다. inspect의 경우이 값은 inspect.stack입니다.

대조적으로, inspect.tracesys.exc_info을 사용합니다. 이것은 예외 처리 스키마의 필수 부분이며 항상 사용할 수 있어야합니다. 기타 모든 관련 기능 (예 : getframeinfo, 이미 프레임이 있음을 의지합니다. 이들의 적용 가능성은 예외를 검사 할 것인지 또는 추적을 호출 할 것인지 여부에 달려 있습니다.

내 기본 로컬 자이툰 sys._getframe입니다. ipy는 -X:Frames으로 실행하면 작동합니다.

2

문서가 참조하는 다른 구현은 자이 썬과 IronPython입니다. 이들은 다른 VM (JVM 및 CLR)에서 실행되고 그러한 스택 프레임을 가지고 있지 않은 Python 언어 구현입니다. 나는 IronPython이 나중에이를 지원한다고 생각한다.

+0

그러나'inspect.currentframe'만이 지원되지 않지만'inspect.trace'와'inspect.stack'는 잘 동작합니까? (이것이 문서가 의미하는 바입니다.) – max