pdb --- Python デバッガ¶
ソースコード: Lib/pdb.py
pdb モジュールは Python プログラム用の対話型ソースコードデバッガを定義しています。
条件付きブレークポイントの設定、ソース行単位でのステップ実行、スタックフレームの調査、ソースコードの表示、任意のスタックフレームのコンテキストでの任意の Python コードの評価をサポートします。
事後デバッグもサポートし、プログラムから呼び出すこともできます。
デバッガーは拡張可能です -- 実際にはクラス Pdb として定義されています。現在これについてのドキュメントはありませんが、ソースを読めば簡単に理解できます。拡張インターフェースはモジュール bdb と cmd を使っています。
参考
faulthandlerモジュール明示的な呼び出し、障害の発生、タイムアウト、ユーザーシグナルの受信に応じて、Python のトレースバックをダンプします。
tracebackモジュールPython プログラムのスタックトレースを抽出・整形・表示する標準インターフェース。
デバッガに入る典型的な方法は、次のコードを挿入することです。
import pdb; pdb.set_trace()
もしくは:
breakpoint()
これをデバッガに入りたい位置に挿入し、プログラムを実行します。
この文の後に続くコードをステップ実行したり、continue コマンドでデバッガを使わずに実行を続けたりできます。
バージョン 3.7 で変更: 組み込み関数 breakpoint() をデフォルトの引数で呼び出すと、import pdb; pdb.set_trace() の代わりとして使えます。
def double(x):
breakpoint()
return x * 2
val = 3
print(f"{val} * 2 is {double(val)}")
デバッガのプロンプトは (Pdb) で、デバッグモードに入っていることを示します。
> ...(2)double()
-> breakpoint()
(Pdb) p x
3
(Pdb) continue
3 * 2 is 6
バージョン 3.3 で変更: readline モジュールによるコマンドおよびコマンド引数のタブ補完が利用できます。たとえば、p コマンドの引数では現在のグローバルおよびローカル名が候補として表示されます。
コマンドライン・インターフェース¶
コマンドラインから pdb を呼び出して他のスクリプトをデバッグすることもできます。
例えば、次のようにします。
python -m pdb [-c command] (-m module | -p pid | pyfile) [args ...]
モジュールとして pdb を起動すると、デバッグ中のプログラムが異常終了したときに pdb が自動的に事後デバッグモードに入ります。事後デバッグ後 (またはプログラムの正常終了後)、pdb はプログラムを再起動します。自動再起動を行った場合、pdb の状態 (ブレークポイントなど) はそのまま維持されるので、たいていの場合、プログラム終了時にデバッガーも終了させるよりも便利なはずです。
- -c, --command <command>¶
.pdbrcファイルで指定したかのようにコマンドを実行します。 デバッガコマンド を参照してください。バージョン 3.2 で変更:
-cオプションが追加されました。
- -m <module>¶
python -mと同様の方法でモジュールを実行します。 スクリプトの場合と同様に、デバッガはモジュールの最初の行の直前で実行を一時停止します。バージョン 3.7 で変更:
-mオプションが追加されました。
- -p, --pid <pid>¶
指定された PID のプロセスにアタッチします。
Added in version 3.14.
実行中の Python プロセスにアタッチしてリモートデバッグするには、-p または --pid オプションで対象プロセスの PID を指定します。
python -m pdb -p 1234
注釈
システムコールでブロックしているか、入出力を待っているプロセスへのアタッチは、次のバイトコード命令が実行されるか、プロセスがシグナルを受け取るまで有効になりません。
デバッガの制御下で文を実行する典型的な使い方は次のとおりです。
>>> import pdb
>>> def f(x):
... print(1 / x)
>>> pdb.run("f(2)")
> <string>(1)<module>()
(Pdb) continue
0.5
>>>
クラッシュしたプログラムを調べるための典型的な使い方は以下のようになります:
>>> import pdb
>>> def f(x):
... print(1 / x)
...
>>> f(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in f
ZeroDivisionError: division by zero
>>> pdb.pm()
> <stdin>(2)f()
(Pdb) p x
0
(Pdb)
バージョン 3.13 で変更: PEP 667 の実装により、最適化されたスコープ 内での実行中であっても、pdb から名前に代入すると、実行中のスコープに直ちに反映されるようになりました。
このモジュールは以下の関数を定義しています。それぞれが少しづつ違った方法でデバッガに入ります:
- pdb.run(statement, globals=None, locals=None)¶
デバッガーに制御された状態で (文字列またはコードオブジェクトとして与えられた) statement を実行します。あらゆるコードが実行される前にデバッガープロンプトが現れます。ブレークポイントを設定し、
continueとタイプできます。あるいは、文をstepやnextを使って一つづつ実行することができます (これらのコマンドはすべて下で説明します)。オプションの globals と locals 引数はコードを実行する環境を指定します。デフォルトでは、モジュール__main__の辞書が使われます。(組み込み関数exec()またはeval()の説明を参照してください。)
- pdb.runeval(expression, globals=None, locals=None)¶
デバッガーに制御された状態で (文字列またはコードオブジェクトとして与えられる) expression を評価します。
runeval()から復帰するとき、式の値を返します。その他の点では、この関数はrun()と同様です。
- pdb.runcall(function, *args, **kwds)¶
function (関数またはメソッドオブジェクト、文字列ではありません) を与えられた引数とともに呼び出します。
runcall()から復帰するとき、関数呼び出しが返したものはなんでも返します。関数に入るとすぐにデバッガプロンプトが現れます。
- pdb.set_trace(*, header=None, commands=None)¶
呼び出し元のスタックフレームでデバッガに入ります。 コードがデバッグ中でなくても、例えばアサーションが失敗したときなど、プログラム内の特定の位置にブレークポイントを埋め込むのに便利です。 header を指定すると、デバッグ開始の直前にコンソールに表示します。 commands 引数を指定する場合は、デバッガの開始時に実行するコマンドのリストです。
バージョン 3.7 で変更: header キーワード専用引数。
バージョン 3.13 で変更:
set_trace()は、次に実行されるコードの行を待たずに、直ちにデバッガに入るようになりました。Added in version 3.14: commands 引数。
- awaitable pdb.set_trace_async(*, header=None, commands=None)¶
set_trace()の非同期版です。 非同期関数内でawaitを付けて使ってください。async def f(): await pdb.set_trace_async()
この関数でデバッガを起動した場合は
await文を使えます。Added in version 3.14.
- pdb.post_mortem(t=None)¶
指定された例外または トレースバックオブジェクト の事後デバッグに入ります。 値を指定しない場合は現在処理中の例外を使い、処理中の例外がなければ
ValueErrorを送出します。バージョン 3.13 で変更: 例外オブジェクトのサポートが追加されました。
- pdb.pm()¶
sys.last_excにある例外の事後デバッグに入ります。
- pdb.set_default_backend(backend)¶
pdb は
'settrace'と'monitoring'の 2 つのバックエンドをサポートしています。 詳しくはbdb.Bdbを参照してください。Pdbのインスタンス化時にバックエンドを指定しなかった場合に使う、デフォルトのバックエンドを設定できます。 バックエンドの指定がなければ、デフォルトは'settrace'です。注釈
breakpoint()とset_trace()はこの関数の影響を受けません。 これらは常に'monitoring'バックエンドを使います。Added in version 3.14.
- pdb.get_default_backend()¶
pdb のデフォルトのバックエンドを返します。
Added in version 3.14.
run* 関数と set_trace() は、 Pdb クラスをインスタンス化して同名のメソッドを実行することのエイリアス関数です。それ以上の機能を利用したい場合は、インスタンス化を自分で行わなければなりません:
- class pdb.Pdb(completekey='tab', stdin=None, stdout=None, skip=None, nosigint=False, readrc=True, mode=None, backend=None, colorize=False)¶
Pdbはデバッガクラスです。completekey, stdin, stdout 引数は、基底にある
cmd.Cmdクラスに渡されます。そちらの解説を参照してください。skip 引数が指定された場合、 glob スタイルのモジュール名パターンの iterable (イテレート可能オブジェクト) でなければなりません。デバッガはこのパターンのどれかにマッチするモジュールに属するフレームにはステップインしません。 [1]
デフォルトでは、Pdb は
continueコマンドが投入されると、(ユーザーがコンソールから Ctrl-C を押したときに送られる) SIGINT シグナル用ハンドラーを設定します。これにより Ctrl-C を押すことで再度デバッガーを起動することができます。Pdb に SIGINT ハンドラーを変更させたくない場合は nosigint を true に設定してください。readrc 引数はデフォルトでは真で、 Pdb が .pdbrc ファイルをファイルシステムから読み込むかどうかを制御します。
mode 引数はデバッガを起動した方法を指定します。 一部のデバッガコマンドの動作に影響します。 有効な値は、
'inline'(組み込み関数 breakpoint() が使用)、'cli'(コマンドラインからの起動が使用)、None(mode 引数の追加前と互換性のある動作) です。backend 引数はデバッガに使うバックエンドを指定します。
Noneを渡すとデフォルトのバックエンドを使います。set_default_backend()を参照してください。 それ以外でサポートされるバックエンドは'settrace'と'monitoring'です。colorize 引数を
Trueに設定すると、色をサポートしている環境ではデバッガの出力を色付きにします。 pdb に表示されるソースコードが強調表示されます。skip を使ってトレースする呼び出しの例:
import pdb; pdb.Pdb(skip=['django.*']).set_trace()
引数無しで 監査イベント
pdb.Pdbを送出します。バージョン 3.1 で変更: skip パラメータが追加されました。
バージョン 3.2 で変更: nosigint パラメータが追加されました。 以前は Pdb が SIGINT ハンドラを設定することはありませんでした。
バージョン 3.6 で変更: readrc 引数。
Added in version 3.14: mode 引数が追加されました。
Added in version 3.14: backend 引数が追加されました。
Added in version 3.14: colorize 引数が追加されました。
バージョン 3.14 で変更:
breakpoint()やpdb.set_trace()のようなインラインのブレークポイントは、skip パターンがあっても無視し、常に呼び出し元のフレームでプログラムを停止します。
デバッガコマンド¶
デバッガーに認識されるコマンドは以下に一覧されています。たいていのコマンドは以下のように 1、2 文字に省略できます。例えば h(elp) は h か help がで help コマンドを呼び出すことを意味します (ただし he, hel, H, Help, HELP は使用できません)。コマンドの引数はホワイトスペース (スペースかタブ) で区切ってください。コマンド構文として任意の引数は大括弧 ([]) で括られています (実際に大括弧はタイプしないでください)。いくつかから選択できる引数は縦線 (|) で分割されて記述されています。
空行を入力すると入力された直前のコマンドを繰り返します。例外: 直前のコマンドが list コマンドならば、次の 11 行がリストされます。
デバッガが認識しないコマンドは Python 文とみなして、デバッグしているプログラムのコンテキストおいて実行されます。先頭にに感嘆符 (!) を付けることで Python 文であると明示することもできます。これはデバッグ中のプログラムを調査する強力な方法です。変数を変更したり関数を呼び出したりすることも可能です。このような文で例外が発生した場合には例外名が出力されますが、デバッガの状態は変化しません。
バージョン 3.13 で変更: 先頭部分が pdb のコマンドと一致する式や文を、正しく識別して実行できるようになりました。
デバッガは エイリアス をサポートしています。 エイリアスにはパラメータを持たせることができ、調査中のコンテキストにある程度合わせられます。
;; で区切ると、1 行に複数のコマンドを入力できます。
単一の ; は、Python パーサーに渡す 1 行の中で複数のコマンドを区切るために使うので、ここでは使いません。
コマンドの分割では構文を考慮せず、引用符で囲まれた文字列の途中であっても、最初の ;; で入力を分割します。
セミコロンが 2 つ連続する文字列を使うには、';'';' や ";"";" のように暗黙の文字列連結を使う方法があります。
一時的なグローバル変数を設定するには、簡易変数 (convenience variable) を使います。
簡易変数は、名前が $ で始まる変数です。
例えば、$foo = 1 はデバッガのセッションで使えるグローバル変数 $foo を設定します。
簡易変数 はプログラムの実行を再開すると消去されるため、foo = 1 のような通常の変数を使う場合よりも、プログラムに干渉する可能性が低くなります。
あらかじめ定義されている 簡易変数 は 4 つあります:
$_frame: 現在デバッグしているフレーム$_retval: フレームが値を返す際の返り値$_exception: フレームが例外を送出する際の例外$_asynctask: pdb が非同期関数内で停止した場合の asyncio タスク
Added in version 3.12: 簡易変数 の機能が追加されました。
Added in version 3.14: 簡易変数 $_asynctask が追加されました。
ユーザーのホームディレクトリまたはカレントディレクトリに .pdbrc ファイルがある場合、'utf-8' エンコーディングで読み込み、デバッガのプロンプトで入力したかのように実行します。
ただし、空行と # で始まる行は無視します。
この機能は特にエイリアスに便利です。
両方のファイルがある場合は、ホームディレクトリのファイルを先に読み込みます。
そこで定義されたエイリアスは、カレントディレクトリのファイルで上書きできます。
バージョン 3.11 で変更: .pdbrc を 'utf-8' エンコーディングで読むようになりました。
以前はシステムのロケールのエンコーディングで読んでいました。
- h(elp) [command]¶
引数を指定しない場合、利用できるコマンドの一覧が表示されます。引数として command が与えられた場合、そのコマンドのヘルプが表示されます。
help pdbで完全なドキュメント (pdbモジュールの doctring) が表示されます。command 引数は識別子でなければならないため、!コマンドのヘルプを表示するにはhelp execと入力します。
- w(here) [count]¶
最も新しいフレームが一番下になるようにスタックトレースを表示します。 count が 0 の場合は現在のフレームを表示します。 count が負の場合は最も古い方から -count 個のフレームを、正の場合は最も新しい方から count 個のフレームを表示します。 矢印 (
>) が示す現在のフレームが、ほとんどのコマンドのコンテキストを決定します。バージョン 3.14 で変更: count 引数が追加されました。
- d(own) [count]¶
スタックフレーム内で現在のフレームを count レベル (デフォルトは 1) 新しいフレーム方向に移動します。
- u(p) [count]¶
スタックフレーム内で現在のフレームを count レベル (デフォルトは 1) 古いフレーム方向に移動します。
- b(reak) [([filename:]lineno | function) [, condition]]¶
lineno 引数を指定すると、現在のファイルの lineno 行目にブレークポイントを設定します。 行番号の前に filename とコロンを付けると、まだ読み込んでいないものも含め、別のファイルにブレークポイントを設定できます。 ファイルは
sys.path上で検索します。 filename に使える形式は、/abspath/to/file.py、relpath/file.py、module、package.moduleです。function 引数を指定すると、その関数内の最初の実行可能な文にブレークポイントを設定します。 function は、現在の名前空間で評価すると関数になる任意の式にできます。
第二引数を指定する場合、その値は式で、その評価値が真でなければブレークポイントは有効になりません。
引数なしの場合は、それぞれのブレークポイントに対して、そのブレークポイントに行き当たった回数、現在の通過カウント ( ignore count ) と、もしあれば関連条件を含めてすべてのブレークポイントをリストします。
各ブレークポイントには番号が割り当てられます。 他のすべてのブレークポイントコマンドは、この番号でブレークポイントを参照します。
- tbreak [([filename:]lineno | function) [, condition]]¶
一時的なブレークポイントで、最初にそこに達したときに自動的に取り除かれます。引数は
breakと同じです。
- cl(ear) [filename:lineno | bpnumber ...]¶
filename:lineno 引数を与えると、その行にある全てのブレークポイントを解除します。スペースで区切られたブレークポイントナンバーのリストを与えると、それらのブレークポイントを解除します。引数なしの場合は、すべてのブレークポイントを解除します ( が、はじめに確認します ) 。
- disable bpnumber [bpnumber ...]¶
空白で区切って指定した番号のブレークポイントを無効にします。 ブレークポイントを無効にすると、プログラムの実行を止めることができなくなりますが、ブレークポイントの解除と違いブレークポイントのリストに残っており、(再び) 有効にできます。
- enable bpnumber [bpnumber ...]¶
指定したブレークポイントを有効にします。
- ignore bpnumber [count]¶
与えられたブレークポイントナンバーに通過カウントを設定します。count が省略されると、通過カウントは 0 に設定されます。通過カウントがゼロになったとき、ブレークポイントが機能する状態になります。ゼロでないときは、そのブレークポイントが無効にされず、どんな関連条件も真に評価されていて、ブレークポイントに来るたびに count が減らされます。
- condition bpnumber [condition]¶
ブレークポイントに新しい condition を設定します。condition はブレークポイントを制御する条件式で、この式が真を返す場合のみブレークポイントが有効になります。condition を指定しないと既存の条件が除去されます; ブレークポイントは常に有効になります。
- commands [bpnumber]¶
ブレークポイントナンバー bpnumber にコマンドのリストを指定します。コマンドそのものはその後の行に続けます。
endだけからなる行を入力することでコマンド群の終わりを示します。例を挙げます:(Pdb) commands 1 (com) p some_variable (com) end (Pdb)
ブレークポイントからコマンドを取り除くには、
commandsのあとにendだけを続けます。つまり、コマンドを一つも指定しないようにします。bpnumber 引数を指定しない場合、
commandsは現存するブレークポイントのうち最後に設定されたものを対象とします。ブレークポイントコマンドはプログラムを走らせ直すのに使えます。単に
continueコマンドやstep、その他実行を再開するコマンドを使えば良いのです。実行を再開するコマンド (現在は
continue、step、next、return、until、jump、quitとその省略形) を指定すると、その直後に end があるかのようにコマンドリストを終了します。 これは、単なる next や step であっても実行を再開すれば、独自のコマンドリストを持つ別のブレークポイントに到達する可能性があり、どのリストを実行するか曖昧になるためです。コマンドリストに
silentコマンドか、実行を再開するコマンドが含まれている場合、フレーム情報を含むブレークポイントのメッセージは表示しません。バージョン 3.14 で変更: コマンドリストに実行を再開するコマンドがある場合、フレーム情報を表示しないようになりました。
- s(tep)¶
現在の行を実行し、最初に停止できる地点 (呼び出された関数の中、または現在の関数の次の行) で停止します。
- n(ext)¶
現在の関数の次の行に達するか、あるいは関数が返るまで実行を継続します。 (
nextとstepの差はstepが呼び出された関数の内部で停止するのに対し、nextは呼び出された関数を (ほぼ) 全速力で実行し、現在の関数内の次の行で停止するだけです。)
- unt(il) [lineno]¶
引数を省略すると、現在より大きい行番号の行に達するまで実行を続けます。
lineno を指定すると、番号が lineno 以上である行に到達するまで実行します。どちらにしても現在のフレームが返ってきた時点で停止します。
バージョン 3.2 で変更: 明示的に行数指定ができるようになりました。
- r(eturn)¶
現在の関数が返るまで実行を継続します。
- c(ont(inue))¶
ブレークポイントに出会うまで、実行を継続します。
- j(ump) lineno¶
次に実行する行を指定します。最も底のフレーム中でのみ実行可能です。前に戻って実行したり、不要な部分をスキップして先の処理を実行する場合に使用します。
ジャンプには制限があり、例えば
forループの中には飛び込めませんし、finally節の外にも飛ぶ事ができません。
- l(ist) [first[, last]]¶
現在のファイルのソースコードを表示します。引数を指定しないと、現在の行の前後 11 行分を表示するか、直前の表示を続行します。引数に
.を指定すると、現在の行の前後 11 行分を表示します。数値を 1 個指定すると、その行番号の前後 11 行分を表示します。数値を 2 個指定すると、開始行と最終行として表示します; 2 個めの引数が 1 個め未満だった場合、1 個目を開始行、2 個めを開始行からの行数とみなします。現在のフレーム内の現在の行は
->で表示されます。例外をデバッグ中の場合、例外が発生または伝搬した行は、それが現在の行とは異なるとき>>で表示されます。バージョン 3.2 で変更:
>>マーカーが追加されました。
- a(rgs)¶
現在の関数の引数と、その現在の値を表示します。
- p expression¶
現在のコンテキストにおいて expression を評価し、その値をプリントします。
注釈
print()も使えますが、これはデバッガーコマンドではありません --- これは Python の関数print()が実行されます。
- whatis expression¶
expression の型を表示します。
- source expression¶
expression のソースコードの取得を試み、可能であれば表示します。
Added in version 3.2.
- display [expression]¶
現在のフレームで実行が停止するたびに expression の値を調べ、変化していれば表示します。
expression を指定しない場合、現在のフレームで表示対象として登録されているすべての式を表示します。
注釈
display は expression を評価し、前回の評価結果と比較します。 そのため、結果がミュータブルな場合は変更を検出できないことがあります。
以下はプログラム例です:
lst = [] breakpoint() pass lst.append(1) print(lst)
比較する前に
lst.append(1)が評価結果をその場で変更してしまうため、display はlstの変更を検出できません。> example.py(3)<module>() -> pass (Pdb) display lst display lst: [] (Pdb) n > example.py(4)<module>() -> lst.append(1) (Pdb) n > example.py(5)<module>() -> print(lst) (Pdb)
コピーの仕組みを使うと、変更を検出できるようになります。
> example.py(3)<module>() -> pass (Pdb) display lst[:] display lst[:]: [] (Pdb) n > example.py(4)<module>() -> lst.append(1) (Pdb) n > example.py(5)<module>() -> print(lst) display lst[:]: [1] [old: []] (Pdb)
Added in version 3.2.
- undisplay [expression]¶
現在のフレーム内で expression をこれ以上表示しないようにします。expression を指定しない場合、現在のフレームで display 指定されている式を全てクリアします。
Added in version 3.2.
- interact¶
現在のスコープのローカル名前空間とグローバル名前空間から初期化した、新しいグローバル名前空間で、
codeモジュールを使って対話型インタープリタを開始します。 インタープリタを終了してデバッガに戻るには、exit()またはquit()を使います。注釈
interactはコード実行用に新しい専用の名前空間を作るため、変数への代入は元の名前空間に影響しません。 ただし、参照しているミュータブルなオブジェクトへの変更は、通常どおり元の名前空間にも反映されます。Added in version 3.2.
バージョン 3.13 で変更:
exit()とquit()でinteractコマンドを終了できるようになりました。バージョン 3.13 で変更:
interactはsys.stderrではなく、デバッガの出力先に出力するようになりました。
- alias [name [command]]¶
command を実行する、name という名前のエイリアスを作ります。 command を引用符で囲んでは いけません。 置き換えるパラメータは
%1、%2、...、%9で指定でき、%*はすべてのパラメータに置き換えられます。 command を省略すると、name に対する現在のエイリアスを表示します。 引数を指定しない場合は、すべてのエイリアスを一覧表示します。エイリアスは入れ子になってもよく、pdb プロンプトで合法的にタイプできるどんなものでも含めることができます。内部 pdb コマンドをエイリアスによって上書きすることが できます。そのとき、このようなコマンドはエイリアスが取り除かれるまで隠されます。エイリアス化はコマンド行の最初の語へ再帰的に適用されます。行の他のすべての語はそのままです。
例として、二つの便利なエイリアスがあります (特に
.pdbrcファイルに置かれたときに):# インスタンス変数を表示する (使い方: "pi classInst") alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}") # self のインスタンス変数を表示する alias ps pi self
- unalias name¶
指定したエイリアス name を削除します。
- ! statement¶
現在のスタックフレームのコンテキストで、1 行の statement を実行します。 文の最初の単語がデバッガコマンドに似ている場合を除き、感嘆符は省略できます。 例えば、次のようにします:
(Pdb) ! n=42 (Pdb)
グローバル変数を設定するには、代入の前に同じ行で
global文を指定できます。 例えば、次のようにします:(Pdb) global list_options; list_options = ['-l'] (Pdb)
- run [args ...]¶
- restart [args ...]¶
デバッグ中の Python プログラムを再実行します。args が与えられると、
shlexで分割され、結果が新しいsys.argvとして使われます。ヒストリー、ブレークポイント、アクション、そして、デバッガーオプションは引き継がれます。restartはrunの別名です。
- q(uit)¶
デバッガを終了します。 実行中のプログラムは中断されます。 ファイル終端の入力は
quitと同等です。デバッガを
'inline'モードで起動した場合は、確認のプロンプトを表示します。y、Y、<Enter>、EOFのいずれかで終了を確定します。バージョン 3.14 で変更: デバッガを
'inline'モードで起動した場合は、確認のプロンプトを表示するようになりました。 確認後は、次のトレースイベントでbdb.BdbQuitを送出する代わりに、直ちにsys.exit()を呼び出します。
- debug code¶
code をステップ実行する、再帰的なデバッガに入ります。 code は現在の環境で実行する任意の式または文です。
- retval¶
現在の関数の最後の return による返り値を表示します。
- exceptions [excnumber]¶
連鎖した例外を一覧表示したり、例外間を移動したりします。
When using
pdb.pm()orPdb.post_mortem(...)with a chained exception instead of a traceback, it allows the user to move between the chained exceptions usingexceptionscommand to list exceptions, andexceptions <number>to switch to that exception.以下はプログラム例です:
def out(): try: middle() except Exception as e: raise ValueError("reraise middle() error") from e def middle(): try: return inner(0) except Exception as e: raise ValueError("Middle fail") def inner(x): 1 / x out()
pdb.pm()を呼び出すと、例外間を移動できます。> example.py(5)out() -> raise ValueError("reraise middle() error") from e (Pdb) exceptions 0 ZeroDivisionError('division by zero') 1 ValueError('Middle fail') > 2 ValueError('reraise middle() error') (Pdb) exceptions 0 > example.py(16)inner() -> 1 / x (Pdb) up > example.py(10)middle() -> return inner(0)
Added in version 3.13.
脚注