2012-03-30 52 views
3

按照docsinspect.currentframe()可能無法在一些實現工作?

inspect.currentframe()

返回的調用者的堆棧 幀的幀的對象。

CPython實現細節:此函數依賴於Python棧 解釋器中的幀支持,並不保證所有Python實現都存在於 中。如果在沒有實現的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.trace使用sys.exc_info。這是異常處理方案的組成部分,應始終可用。所有其他相關功能,例如getframeinfo,已經依賴於有一個框架。它們的適用性取決於您是要檢查異常還是呼叫回溯。

請注意,我的本地默認jython 的確支持支持sys._getframe。如果與-X:Frames一起運行,ipy工作。

2

docs引用的其他實現是Jython和IronPython。這些是在一個不同的VM(JVM和CLR)運行,並沒有這樣的一個堆棧幀Python語言實現。不過,我認爲IronPython後來增加了一些支持。

+0

但是,它是如何只是'inspect.currentframe'不被支持,但'inspect.trace'和'inspect.stack'工作正常? (這是文檔暗示的。) – max 2012-03-30 15:26:09

相關問題