序章

デバッグはソフトウェア開発プロセスの一部であり、プログラマーはソフトウェアの正常な実行を妨げる問題を探して解決します。

インタラクティブなインタプリタをエミュレートするために使用できるため、デバッグに便利で迅速なツールはPythonコードモジュールです。 このモジュールは、Pythonで記述したコードを試す機会も提供します。

前提条件

Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)

を理解する code モジュール

デバッガーでコードをステップスルーするのではなく、コードモジュールをPythonプログラムに追加して、コードがどのように機能しているかを調べるために、実行を停止してインタラクティブモードに入るようにプログラムに指示できます。 The code モジュールはPython標準ライブラリの一部です。

これは、プログラミングファイルが提供できる複雑さと永続性を犠牲にすることなく、インタープリターを活用できるため便利です。 を使用して code 使用を避けることができるモジュール print() デバッグの形式としてのコード全体のステートメント。これは、時間の経過とともに扱いにくくなる可能性があります。

モジュールをデバッグの方法として利用するには、 interact() モジュールの機能。呼び出された時点でプログラムの実行を停止し、プログラムの現在の状態を調べることができるようにインタラクティブなコンソールを提供します。

情報:このチュートリアルのサンプルコードに従うには、ローカルシステムでPythonインタラクティブシェルを開いて、 python3 指図。 次に、例の後に追加して、例をコピー、貼り付け、または編集できます。 >>> 促す。

可能なパラメータを持つ関数は次のとおりです。

code.interact(banner=None, readfunc=None, local=None, exitmsg=None)

この関数は、read-eval-printループを実行し、 InteractiveConsoleクラスのオブジェクトインスタンスを作成します。これは、インタラクティブなPythonインタープリターの動作をエミュレートします。

オプションのパラメータは次のとおりです。

とともに local パラメータ、次のように使用できます。

  • local=locals() ローカル名前空間の場合
  • local=globals() グローバル名前空間の場合
  • local=dict(globals(), **locals()) グローバル名前空間と現在のローカル名前空間の両方を使用する

に注意してください exitmsg パラメータはPython3.6の新機能であるため、古いバージョンのPythonを使用している場合は、更新するか、省略してください。 exitmsg パラメータ。

あなたは置くことができます interact() プログラム内の任意の場所で機能して、コード内でインタラクティブインタプリタを起動します。

での作業 code モジュール

と呼ばれる銀行口座残高プログラムのコンテキストでこれを見てみましょう balances.py. 設定します local パラメータから locals() 名前空間をローカルに設定します。

balances.py
# Import code module
import code

bal_a = 2324
bal_b = 0
bal_c = 409
bal_d = -2

account_balances = [bal_a, bal_b, bal_c, bal_d]


def display_bal():
    for balance in account_balances:
        if balance < 0:
            print("Account balance of {} is below 0; add funds now."
                  .format(balance))

        elif balance == 0:
            print("Account balance of {} is equal to 0; add funds soon."
                  .format(balance))

        else:
            print("Account balance of {} is above 0.".format(balance))

# Use interact() function to start the interpreter with local namespace
code.interact(local=locals())

display_bal()

関数を使用しました code.interact() とともに local=locals() インタープリターループ内のデフォルトとしてローカル名前空間を使用するパラメーター。

上記のプログラムを使用して、 python3 仮想環境にいない場合はコマンド、または python 私たちがいる場合のコマンド:

  1. python balances.py

プログラムを実行すると、最初に次の出力が表示されます。

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

カーソルはの最後に置かれます >>> Pythonインタラクティブシェルの場合と同じように、line。

ここから、変数や関数などを出力するための呼び出しを発行できます。

>>> print(bal_c)
409
>>> print(account_balances)
[2324, 0, 409, -2]
>>> print(display_bal())
Account balance of 2324 is 0 or above.
Account balance of 0 is equal to 0, add funds soon.
Account balance of 409 is 0 or above.
Account balance of -2 is below 0, add funds now.
None
>>> print(display_bal)
<function display_bal at 0x104b80f28>
>>> 

ローカル名前空間を使用することで、変数を出力して関数を呼び出すことができることがわかります。 最終 print() 呼び出しは関数の場所を示します display_bal コンピュータのメモリ内。

通訳者との共同作業で確認できたことに満足したら、を押すことができます。 CTRL + D * nixベースのシステムの場合、または CTRL + Z Windowsベースのシステムがコンソールを離れてプログラムの実行を続行する場合。

プログラムの残りの部分を実行せずにコンソールを終了したい場合は、次のように入力します。 quit() プログラムは中止されます。

を活用するには bannerexitmsg パラメータの場合、次のように実行できます。

balances.py
...
# Use interact() function to start the interpreter
code.interact(banner="Start", local=locals(), exitmsg="End")

display_bal()

プログラムを実行すると、プログラムを実行すると次の出力が返されます。

Start
>>> 

を使用して banner パラメータを使用すると、コード内に複数のポイントを設定し、それらを識別することができます。 たとえば、 banner それは印刷します "In [for-loop](how-to-construct-for-loops-in-python-3)"exitmsg それは印刷します "Out of for-loop"、コードのどこにいるかを正確に知ることができます。

ここからは、いつものようにインタプリタを使うことができます。 入力したら CTRL + D インタープリターを終了するには、終了メッセージを受け取り、関数を実行します。

End
Account balance of 2324 is 0 or above.
Account balance of 0 is equal to 0, add funds soon.
Account balance of 409 is 0 or above.
Account balance of -2 is below 0, add funds now.

これで、インタラクティブセッションに続いてプログラムが完全に実行されました。

使用が完了したら code コードをデバッグするためのモジュール、あなたは削除する必要があります code プログラムが通常どおり実行されるように、関数とimportステートメントを使用します。 The code モジュールはユーティリティを提供するので、完了したら、自分でクリーンアップすることが重要です。

結論

を使用して code インタラクティブコンソールを起動するモジュールを使用すると、コードの動作を詳細に確認して、その動作を理解し、必要に応じて変更を加えることができます。 詳細については、コードモジュールの公式ドキュメントをご覧ください。

Pythonコードのデバッグに使用できる他の方法の詳細については、Pythonデバッガーpdbの使用方法に関するチュートリアルとロギングの使用方法に関するチュートリアルをお読みください。