Pythonのデバッガ(pdb)を使う

「@pdb」コマンドは、捕捉されなかった例外が出た時に実行をpdbデバッガに渡せと指示するものです。 デフォルトではオフになっています。

先程のhello.pyは引数なしに実行するとエラーになります。


In [24]: @run ~/myscript/hello.py
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

/home/snakeman/myscript/hello.py
     -2 import sys
     -1 print "hello, %s!" % sys.argv[1]

IndexError: list index out of range
WARNING: Failure executing file: </home/snakeman/myscript/hello.py>

In [25]:

「@pdb」を実行します。


In [25]: @pdb
Automatic pdb calling has been turned ON

これでエラーが出ればpdbに渡されることになります。もう一回hello.pyを引数なしで実行します。


In [28]: @run ~/hello.py
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

/home/snakeman/myscript/hello.py
     -2 import sys
     -1 print "hello, %s!" % sys.argv[1]

IndexError: list index out of range
> /home/snakeman/myscript/hello.py(2)?()
-> print "hello, %s!" % sys.argv[1]
(Pdb)

pdbに渡されました。pdbの使い方についてはhttp://www.python.jp/Zope/articles/tips/を参照してください。 @pdbは呼び出す毎にON,OFFが切り替わります。「@pdb on」「@pdb off」とすれば 明示的にオン・オフを切替えることができます。

@runでスクリプトファイルを実行する場合、任意の場所に「1/0」を埋め込んで ゼロ割り例外エラーを出させてpdbに渡す、ということができます。