2012-03-30 22 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スタック インタプリタのフレームサポートに依存しています。これは、 Pythonのすべての実装には存在しません。 Pythonスタックフレームサポートなしの実装で実行している場合、この関数はNoneを返します。

どのようにこの機能だけが「実装依存」とマークされていますか?この機能が動作しない場合、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は、既にフレームがあることに頼っています。それらの適用可能性は、例外を検査するか、トレースバックを呼び出すかによって異なります。

ローカルの既定のjython は、をサポートします。sys._getframeです。 ipyは-X:Framesで実行すると動作します。

2

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

+0

しかし、 'inspect.currentframe'だけがサポートされていませんが、' inspect.trace'と 'inspect.stack'は正常に動作していますか? (これがドキュメントの意味です)。 – max

関連する問題