2009-05-25 3 views
1

は、私は最近、PythonのPythonが例外を発生させる関数のスコープを調べるにはどうすればよいですか?

 
-i  : inspect interactively after running script, (also PYTHONINSPECT=x) 
     and force prompts, even if stdin does not appear to be a terminal 

これはグローバルスコープ内のオブジェクトを検査するための素晴らしいですが、例外が関数呼び出しで提起された場合、何が起こるに非常に便利な「-i」フラグを発見し、そしてIました関数のローカル変数を調べたいのですか?もちろん、私は例外が最初に発生した場所の範囲に興味があります、それに到達する方法はありますか?

+0

この質問をチェック:[エラー時に自動的にpythonデバッガを起動する](http://stackoverflow.com/questions/242485/starting-python-debugger-automatically-on-error) – tzot

+0

ありがとうございますが、これは私のものではありません探している。可能であれば、コードをラップする必要はありません。 – saffsd

答えて

5

"死後の"デバッガです。例外が発生したスコープにあなたを置き、通常のpdbコマンドを使用することができます。

私はいつもを使用しています。です。これは標準ライブラリ(ipythonは不要)の一部であり、ソースコードにデバッグコマンドを編集する必要はありません。

ただ覚えておいてください。他のコマンドを最初に入力すると、例外が発生したスコープが失われます。

+0

興味深い。しかし、なぜあなたは通常のpdbセッションのような変数にアクセスできないのですか?結果を表示するには、印刷のvarnameを行う必要があります。 – Unknown

4

使用ipython:http://mail.scipy.org/pipermail/ipython-user/2007-January/003985.html

使用例:

from IPython.Debugger import Tracer; debug_here = Tracer() 

#... later in your code 
debug_here() # -> will open up the debugger at that point. 

「デバッガがアクティブにしたら、あなたはPDBを参照してくださいなど、コードを ステップへの定期的なすべてのコマンドを使用してブレークポイントを設定することができます使用法の詳細については、Python標準ライブラリのドキュメント を参照してください。 ipythonで

+0

ブライアンありがとう! – reto

5

、あなたはあなたのコードがそれを変更することなくクラッシュした場所に変数を調べることができます。)すぐに(

>>> import pdb 
>>> pdb.pm() 

pdb.pmを入力し、対話型のプロンプトで

>>> %pdb on 
>>> %run my_script.py 
関連する問題