web-dev-qa-db-ja.com

Spyderの変数エクスプローラーでのローカル変数の表示

私はpythonを初めて使用し、SpyderのIDEを使用しています。変数エクスプローラーであることに感謝します。しかし、いくつかの調査に基づいて、グローバル変数のみを表示することがわかりました。回避策そのために私が見つけたのは、inspectモジュールを使用することです。

import inspect

local_vars = {}

def main():
    global local_vars
    a = 2
    b = 4
    c = a+b
    local_vars = inspect.currentframe().f_locals
    return c

main()

これはうまく機能しますが、main()内から呼び出される他の関数があり、これらの変数を変数エクスプローラーにも表示したいと考えています。私はメイン関数の変数に対して何が行われたのかを真似て、dictが表示されません。 Spyderの変数エクスプローラーオプションで「サポートされていないデータタイプを除外する」設定を無効にすると、2番目の辞書が適切なサイズ属性で表示されますが、開いたり表示したりできません。可能な回避策に関するアイデアはありますか? BTWを投稿するのはこれが初めてです。

ありがとう!!


これが私の問題の実際の例であり、私はそれをpylabサブプロットまで追跡しました。

import inspect, pylab

mainVars = {}

def main():
    global mainVars

    a = 1
    b = 2

    fig = pylab.figure()
    subPlot = fig.add_subplot(211)    ## line of interest

    pylab.close('all')

    mainVars = inspect.currentframe().f_locals

main()

関心のある行がコメント化されると、dictは正常に作成され、表示できます。 fig.add_subplot()を使用して作成されたオブジェクトは、dictによって適切に処理されていないようです。サポートされていないデータ型のようです。

これが問題の明確化に役立つことを願っています。

再度、感謝します。

11
Mike L

サポートされていないローカル変数の内容を表示するには、次の手順を実行する必要があります。

  1. 変数エクスプローラーのオプションメニューに移動します(左から右にある最後のアイコン)。

  2. サポートされていないデータタイプを除外というオプションを選択します。

次に、ダブルクリックできない場合でも、f_locals辞書に保存されているすべてのローカル変数が表示されます。

11
Carlos Cordoba

これらの回避策はすべて、コードを外部の人にとって非常に読みにくくしています。関数内の変数の値を検査するには、2つのオプションがあります。まず、関心のある変数を返すだけです。

def main():
    a = 2
    b = 4
    c = a+b

    return a, b, c

a, b, c = main()

次に、関数が期待どおりに動作することを確認するか、デバッグするだけの場合は、関数をデバッグしてステップインできます。そのため、ファイルを直接実行するのではなく、メニューから[実行|デバッグ]を選択します。次に、関数にステップインできます。変数の値は、実行が関数の内部にあるときに変数エクスプローラーに表示されます。

2
chthonicdaemon