だから私はPythonスクリプトを実行しています。
_import ipdb; ipdb.set_trace()
_
(iPythonのPDBのバージョンですが、違いはないと思いますが、色付きの出力にのみ使用します)。
今、私はデバッガーに到達したときに、if句やforループなどの複数行のステートメントを実行したいのですが、すぐに入力します
_if condition:
_
returnキーを押すと、エラーメッセージ*** SyntaxError: invalid syntax (<stdin>, line 1)
が表示されます
PDB内で複数行のステートメントを実行するにはどうすればよいですか?これが不可能な場合、if句またはforループを実行する方法はありますか?
これは、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セッション全体が終了します。
Python(2.7.1)インタープリターまたはデバッガー(pdbのインポート)内では、次の構文で複数行のステートメントを実行できます。
for i in range(5): print("Hello"); print("World"); print(i)
注:インタープリター内では、コードを実行する前にreturnを2回押す必要があります。ただし、デバッガー内では、1回だけリターンする必要があります。
私の推奨事項は、IPython埋め込みを使用することです。
python
ipdb> from IPython import embed; embed()
ブレークポイントに到達したときにいくつかのコマンドを実行する場合は、特別なケースがあります。次に、デバッガコマンドcommands
があります。複数行のコマンドを入力し、end
キーワードでシーケンス全体を終了できます。 (pdb) help commands
。
あなたがこれを行うことができるかどうかはわかりませんが、それはipdbにとって素晴らしい機能です。もちろんリスト内包表記を使用して、次のような単純な複数行の式を実行できます。
if y == 3: print y; print y; print y;
また、通常は複数行を必要とする必要な処理を行うために、事前にいくつかの関数を作成することもできます。
テキストエディターでコードを記述し、デバッガーに貼り付けます。
if True:
print('a')
それはばかげた解決策ですが、汚い迅速かつ作業でもあります。 Linuxターミナルで動作しますが、Windowsコンソールで動作するかどうかはわかりません。