Jupyter NotebookやGoogle Colabでは、エラーが出た直後に%debug
と入力するだけで、失敗地点に飛んで原因を調べられます。
事前にブレークポイントを仕込む必要がなく、学習や試行錯誤のスピードを落としません。
本記事では、Python初心者でも迷わないように、起動手順と最低限のコマンドにしぼって詳しく解説します。
Jupyter/Colabの%debugとは
JupyterやColabは内部でIPythonを使っています。
%debug
はそのIPythonが提供する「ポストモーテムデバッガ(例外発生直後に入るデバッガ)」を起動するマジックコマンドです。
直前に起きた最後の未処理例外のスタックフレームに入り、変数やコードの状態をその場で調べられます。
エラー直後に使える簡単デバッガ
エラーが起きたら、同じノートブックの次のセルで%debug
と打つだけです。
以下は最小例です。
# エラーをわざと起こす最小例
def boom():
# 0で割ると ZeroDivisionError が発生します
return 1 / 0
boom() # ここで例外が発生してセルが停止
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
# 直後のセルでデバッガに入る
%debug
# 以降は ipdb> プロンプトでコマンドを入力します
# 例: w (where), l (list), p <式>, q (quit) など
> <ipython-input-...>(3)boom()
2 def boom():
----> 3 return 1 / 0
4
ZeroDivisionError: division by zero
ipdb> w
... 省略 ...
> <ipython-input-...>(3)boom()
ipdb> l
1 def boom():
2 # 0で割ると ZeroDivisionError が発生します
----> 3 return 1 / 0
4
ipdb> p 1+1
2
ipdb> q
以下はGoogle Colabで実行した例です。

- 関連記事:PythonのTracebackの読み方と直し方: エラーメッセージについて解説
- 関連記事:例外(Exception)入門: 実行時エラーの正しい理解
- IPython: post-mortem debugging %debug(公式ドキュメント)
Tracebackから原因をその場で確認
Tracebackで示されたエラー行で実際に停止し、その時点の変数や関数の呼び出し関係を確認できます。
行周辺のコード表示や、各フレームの変数チェックが1つの画面で完結するため、原因特定までの往復が減ります。
Python初心者でも使いやすいIPythonマジック
%debug
はインポート不要・1行コマンドで起動できます。
通常のpdb
のように複雑な設定は不要で、Jupyter/Colabのセルのまま対話的に使えるため、最初のデバッガ体験として最適です。
使い方(手順)
流れは「エラーを出す」→「すぐ%debug
」→「調べる」→「q
で抜ける」だけです。
再現しやすい小さな例で練習しておくと、本番で迷いません。
エラーを発生→直後に%debugを実行
関数をまたぐ例で、スタック移動も体験してみましょう。
# 例: 空のリストの平均を計算しようとして 0除算エラーになるコード
def sum_list(nums):
# 総和だけは正常に計算できる
return sum(nums)
def calc_mean(nums):
total = sum_list(nums)
n = len(nums) # n が 0 のときに次の行で 0除算
return total / n
def main():
data = [] # バグ: 空データを渡してしまう
return calc_mean(data)
main() # ここで ZeroDivisionError
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
# 直後のセルでデバッガに入る
%debug
> <ipython-input-...>(9)calc_mean()
7 n = len(nums) # n が 0 のときに次の行で 0除算
----> 8 return total / n
9
ipdb> w # どこから呼ばれたか(スタック)を確認
<ipython-input-...>(13)main()
> <ipython-input-...>(8)calc_mean()
ipdb> p nums # 現在のフレーム(calc_mean)の引数
[]
ipdb> p n # 問題の値を特定
0
ipdb> up # 呼び出し元(main)へ移動
> <ipython-input-...>(12)main()
ipdb> p data # 呼び出し元のローカル変数を確認
[]
ipdb> q # 調査が済んだら終了
Colabでも同じ手順で起動
Colabでも手順は同じで、%debug
を次のセルで実行します。
出力領域にipdbプロンプトが現れ、w
やp
などのコマンドを対話的に打てます。
ノートブック環境により表示の行番号やパス表記が多少異なりますが、操作は変わりません。
Colab利用時の小さなポイント
Colabでは、セルの再実行や出力クリアを行っても最後の例外が残っていれば%debug
で入れます。
ただしカーネルを再起動すると履歴と変数は完全に消えるため、次節の注意点もご覧ください。
終了はq(quit)で抜ける
デバッグを終えたらq
(またはquit
)で終了します。
誤って抜けた場合は、再度%debug
を実行すれば同じ場所に戻れます。
ipdb> q
# → デバッガ終了。セルの実行も終了します。
基本コマンド(最小セット)
最低限これだけ押さえれば、原因調査は十分に進められます。
コマンド早見表:
コマンド | 意味 |
---|---|
w または where | 停止位置と呼び出し関係を表示 |
p 式 | 変数や式の評価結果を表示 |
l または list | 現在行の前後のソースを表示 |
up/down | 呼び出し元/呼び出し先のフレームへ移動 |
どこで止まったか確認(where/w)
スタックの全体像を掴むと、どの層で設計ミスが起きたのかが見えます。
現在位置には矢印が付きます。
ipdb> w
<ipython-input-...>(13)main()
> <ipython-input-...>(8)calc_mean()
変数の中身を見る(p 変数名)
p
はそのフレームのスコープで式を評価します。
辞書やリストが大きい場合はpp
(pretty print)が見やすいです。
ipdb> p nums
[]
ipdb> p n
0
ipdb> pp {"n": n, "total": total}
{'n': 0, 'total': 0}
エラー行周辺を表示(list/l)
l
で前後数行のソースを一覧できます。
範囲指定l 1,50
のような使い方も可能です。
ipdb> l
5 def calc_mean(nums):
6 total = sum_list(nums)
7 n = len(nums)
----> 8 return total / n
9
ipdb> l 1,20
呼び出し元へ移動(up)・戻る(down)
up
で1段上のフレーム(呼び出し元)へ、down
で下へ移動します。
上位フレームの引数やローカル変数を確認し、入力データの誤りを特定できます。
ipdb> up
> <ipython-input-...>(12)main()
ipdb> p data
[]
ipdb> down
> <ipython-input-...>(8)calc_mean()
ipdb> p n
0
よくある質問と注意点
初心者がつまずきやすいポイントを押さえておくと、実戦投入がスムーズです。
エラーがないと%debugは起動しない
直近に未処理例外が発生していないと%debug
は入れません。
メッセージ例は以下の通りです。
%debug
No exception is being debugged
try-exceptで例外を自前で捕まえた場合は未処理にならないため%debug
は動きません。
必要に応じてexcept内でraise
し直すか、%pdb on
の自動起動を使います。
カーネル再起動で状態はリセットされる
カーネルを再起動すると、変数や最後の例外履歴はすべて消えます。
%debug
の対象もリセットされるため、再現用セルをもう一度実行してから%debug
に入ってください。
自動で起動したい場合は%pdb on
%pdb on
を有効化すると、例外が発生した瞬間に自動でデバッガに入ります。
調査の手間をさらに減らせます。
# 自動デバッグを有効化
%pdb on
def f():
# ここでエラーが起きた瞬間に自動で ipdb に入る
return 1 / 0
f()
Automatic pdb calling has been turned ON
> <ipython-input-...>(6)f()
5 def f():
----> 6 return 1 / 0
7
ZeroDivisionError: division by zero
ipdb> p 1+1
2
ipdb> q
# 使い終わったら無効化
%pdb off
補足: %pdb
の設定はセッション単位です。
ノートブックを再起動したら再度オンにしてください。
JupyterでもColabでも同様に利用できます。
まとめ
%debugは、Jupyter/Colabでエラー直後に原因へ最短距離で到達するための強力な第一歩です。
操作は、エラーを出してから%debug
で入り、w
で位置を把握し、p
で変数を確認し、l
でコードを読み、必要ならup/down
で呼び出し元に遡る、最後にq
で抜ける、というシンプルな流れです。
自動化したい場合は%pdb on
も活用すると、再現→調査→修正のサイクルがぐっと短くなります。
初心者の方は本記事の最小コマンドだけでも十分に威力を発揮しますので、まずは小さな例で手を動かして慣れてみてください。