203

そのため、Python のデバッガーである PDB を次のように呼び出している Python スクリプトを実行しています。

import ipdb; ipdb.set_trace()

(iPython の PDB のバージョンですが、違いはないと思いますが、色付きの出力にのみ使用します)。

ここで、デバッガーに到達したら、if 句や for ループなどの複数行のステートメントを実行したいのですが、入力するとすぐに

if condition:

リターンキーを押すと、エラーメッセージが表示されます*** SyntaxError: invalid syntax (<stdin>, line 1)

PDB内で複数行のステートメントを実行するにはどうすればよいですか? 不可能な場合、if 句または for ループを引き続き実行する方法はありますか?

4

6 に答える 6

303

pdb でこれを行うと、利用可能なすべてのローカル変数を使用して一時的な対話型 Python セッションを起動できます。

(pdb) !import code; code.interact(local=vars())
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

完了したら、Ctrl-D を使用して通常の pdb プロンプトに戻ります。

Ctrl-C を押さないでください。pdb セッション全体が終了します。

于 2011-12-05T15:16:03.270 に答える
36

Python(2.7.1)インタープリターまたはデバッガー(import pdb)内で、次の構文を使用して複数行のステートメントを実行できます。

for i in range(5): print("Hello"); print("World"); print(i)

注:インタープリター内にいるときは、コードが実行される前にreturnキーを2回押す必要があります。ただし、デバッガー内では、Returnキーを1回押すだけで済みます。

于 2011-05-11T16:33:08.990 に答える
7

ブレークポイントに到達したときにいくつかのコマンドを実行したい場合は、特別なケースがあります。次に、デバッガー コマンドがありますcommandsend複数行のコマンドを入力し、キーワードでシーケンス全体を終了することができます。もっと(pdb) help commands

于 2011-05-11T17:16:30.510 に答える
2

あなたがこれを行うことができるかどうかはわかりませんが、それはipdbにとって素晴らしい機能になるでしょう。もちろん、リスト内包表記を使用して、次のような単純な複数行の式を実行できます。

if y == 3: print y; print y; print y;

また、通常は複数行かかる必要な処理を実行するために、事前にいくつかの関数を作成することもできます。

于 2011-05-11T16:18:28.180 に答える