3

根据文档

inspect.currentframe()

返回调用者堆栈框架的框架对象。

CPython 实现细节:此函数依赖于解释器中的 Python 堆栈帧支持,并不保证在所有 Python 实现中都存在。如果在不支持 Python 堆栈框架的实现中运行,则此函数返回 None。

为什么只有这个函数被标记为“依赖于实现”?如果这个功能不起作用,是不是类似的功能,例如inspect.traceinspect.stack等也不能使用?

另外,“堆栈框架支持”是什么意思,为什么会不存在?

4

2 回答 2

5

的可用性inspect.currentframesys._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. 如果使用 .ipy 运行,ipy 可以工作-X:Frames

于 2016-04-22T05:42:27.607 回答
2

文档引用的其他实现是 Jython 和 IronPython。这些是在不同的 VM(JVM 和 CLR)中运行并且没有这样的堆栈框架的 Python 语言实现。不过,我认为 IronPython 后来增加了一些对此的支持。

于 2012-03-30T08:35:37.320 回答