3

ドキュメントによると:

inspect.currentframe()

呼び出し元のスタックフレームのフレームオブジェクトを返します。

CPython実装の詳細:この関数は、インタープリターでのPythonスタックフレームのサポートに依存しています。これは、Pythonのすべての実装に存在することが保証されているわけではありません。Pythonスタックフレームサポートのない実装で実行している場合、この関数はNoneを返します。

この関数だけが「実装依存」としてマークされているのはどうしてですか?inspect.traceこの機能が機能しない場合、、などの同様の機能inspect.stackも利用できませんか?

また、「スタックフレームサポート」とはどういう意味ですか、なぜそれがないのでしょうか?

4

2 に答える 2

5

の可用性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。ipyは、で実行すると機能し-X:Framesます。

于 2016-04-22T05:42:27.607 に答える
2

ドキュメントが参照している他の実装は、JythonとIronPythonです。これらは、別のVM(JVMとCLR)で実行され、そのようなスタックフレームを持たないPython言語の実装です。ただし、IronPythonは後でそのサポートを追加したと思います。

于 2012-03-30T08:35:37.320 に答える