34

IPython セッションがあり、そこからスクリプトを呼び出すとします。

> run my_script.py

my_script.pyIPython から自分のワークスペースを検査できるブレークポイントを誘導する方法はありますか?

以前のバージョンの IPython では、次のことができると読んだことを覚えています。

from IPython.Debugger import Tracer;     

def my_function():
    x = 5
    Tracer()
    print 5;

しかし、サブモジュールDebuggerはもう利用できないようです。

IPython セッションが既に開いていると仮定すると、どのようにプログラムを自分の選択した場所で停止し、ワークスペースを IPython で調べることができますか?

一般に、行番号を事前に指定する必要のないソリューションを好みます。これは、Tracer()上記のような呼び出しを複数回行う可能性があり、行番号がどこにあるかを追跡する必要がないためです。

4

6 に答える 6

34

別のTracer()モジュールの ipython にまだ存在します。次のことができます。

from IPython.core.debugger import Tracer

def my_function():
    x = 5
    Tracer()()
    print 5

追加の呼び出し括弧に注意してくださいTracer

edit : IPython 6 以降Tracer では非推奨set_trace()になっているため、代わりに次を使用する必要があります。

from IPython.core.debugger import set_trace

def my_function():
    x = 5
    set_trace()
    print 5
于 2013-09-20T07:58:38.730 に答える
13

set_trace()これは、廃止されたメソッドの代わりにメソッドを使用するバージョンTracer()です。

from IPython.core.debugger import Pdb

def my_function():
    x = 5
    Pdb().set_trace()
    print 5
于 2017-08-10T16:18:07.467 に答える
5

私はいつも同じ質問をしてきましたが、私が見つけた最善の回避策は、次のようにコードを壊す行を追加することです。

...
a = 1+2
STOP
...

次に、そのコードを実行すると壊れてしまい、%debug を実行してそこに移動して検査することができます。%pdb をオンにして、コードが壊れた場所に常に移動することもできますが、コードが壊れるたびにどこでも検査したくない場合は面倒です。もっとエレガントなソリューションが欲しいです。

于 2013-05-16T16:39:51.017 に答える