1. ホーム
  2. パイソン

[解決済み】エラー時に自動的にpythonデバッガを起動する。

2022-04-04 10:15:24

質問

これは私がかなり長い間疑問に思っていたことなのですが、適切な解決策が見つからなかったのです。スクリプトを実行して、例えばIndexErrorに遭遇した場合、pythonはエラーの行、場所、簡単な説明を出力して終了します。エラーが発生したときに自動的にpdbを起動することは可能でしょうか?ファイルの先頭に余分なimport文があることや、数行の余分なコードがあることに反対しているわけではありません。

どのように解決するのですか?

を使用することができます。 トレースバック.print_exc を実行すると、例外のトレースバックが表示されます。次に sys.exc_info を呼び出してトレースバックを抽出し、最後に pdb.post_mortem そのトレースバックで

import pdb, traceback, sys

def bombs():
    a = []
    print a[0]

if __name__ == '__main__':
    try:
        bombs()
    except:
        extype, value, tb = sys.exc_info()
        traceback.print_exc()
        pdb.post_mortem(tb)

で対話的なコマンドラインを開始する場合。 code.interact 例外が発生したフレームのローカルを使用して、次のようにすることができます。

import traceback, sys, code

def bombs():
    a = []
    print a[0]

if __name__ == '__main__':
    try:
        bombs()
    except:
        type, value, tb = sys.exc_info()
        traceback.print_exc()
        last_frame = lambda tb=tb: last_frame(tb.tb_next) if tb.tb_next else tb
        frame = last_frame().tb_frame
        ns = dict(frame.f_globals)
        ns.update(frame.f_locals)
        code.interact(local=ns)