最も簡単な方法は、次のようにコード全体をtry
ブロック内にラップすることです。
if __name__ == '__main__':
try:
raise Exception()
except:
import pdb
pdb.set_trace()
このレシピsys.excepthook
で説明されているように、キャッチされない例外の処理をオーバーライドするため に使用する、より複雑なソリューションがあります。
## {{{ http://code.activestate.com/recipes/65287/ (r5)
# code snippet, to be included in 'sitecustomize.py'
import sys
def info(type, value, tb):
if hasattr(sys, 'ps1') or not sys.stderr.isatty():
# we are in interactive mode or we don't have a tty-like
# device, so we call the default hook
sys.__excepthook__(type, value, tb)
else:
import traceback, pdb
# we are NOT in interactive mode, print the exception...
traceback.print_exception(type, value, tb)
print
# ...then start the debugger in post-mortem mode.
pdb.pm()
sys.excepthook = info
## end of http://code.activestate.com/recipes/65287/ }}}
上記のコードは、Pythonによって自動的にインポートされるinsidedirectorysitecustomize.py
というファイルに含める必要があります。site-packages
デバッガーは、Pythonが非対話型モードで実行されている場合にのみ開始されます。