スクリプト ツールのデバッグ

コーディング エラーはなかなか避けられないものです。エラーの発生箇所を見つけるには、大きく分けて次の 2 つの方法があります。

print ステートメントの使用

print ステートメントを使用したバグの検出は、よく使用される自明な方法です。スクリプト ツールからはツールの進捗ダイアログ ボックスにアクセスできるため、スクリプトを編集して AddMessage()AddWarning()、または AddError() への呼び出しを組み込むことによって、値およびチェックポイント メッセージを進捗状況ダイアログ ボックスに印刷できます。別の方法としては、メッセージを返す独立した方法(win32ui モジュールの MessageBox メソッドなど)を使用することです。この方法では、ポップアップ ダイアログ ボックスが表示されます。ダイアログ ボックスで実行を続行するためにはその都度 [OK] をクリックしなければなりません。そのため、print ステートメントによる方法を使用したほうがスクリプトの実行ペースを速めることができます。以下は、両方の方法を使用した例です。

import arcpy
import win32ui
import win32con

n = 5

# Print message to progress dialog
#
arcpy.AddMessage("Value of n = {}".format(n))

# Issue a popup dialog with OK and Cancel button
#
val = win32ui.MessageBox("Value of n = {}".format(n), "title",
                         win32con.MB_OKCANCEL)

# Based on the button clicked, you can branch execution
#
if val == 1:
    arcpy.AddMessage("You clicked OK")
else:
    arcpy.AddError("You clicked Cancel")
    raise arcpy.ExecuteError, "Execution stops due to Cancel button click"

arcpy.AddMessage("This statement reached")

デバッガの使用

他の方法は、デバッグをサポートしている Python 統合開発環境(IDE)を使用することです。デバッガを使用してブレーク ポイントを設定し、個々のコード行にステップイン、ステップアウト、ステップオーバーして、コードを一切変更せずに変数の内容を調べることができます。デバッガは print ステートメントの挿入と比較してはるかに効率的であり、一般的にバグの切り分けが迅速です。

一般的な IDE としては、次のものが挙げられます。

デバッガを使用する 1 つの方法は、IDE 内でスクリプトを直接開き、すべてのパラメータに値が設定されるように変更して、デバッグを続行することです。単純な例では、この方法で正しく機能します。ただし、スクリプトがレイヤまたはテーブル ビューのパラメータを使用する場合、これらの変数をリアルタイムで作成する必要があります。フィールド マップや空間参照などの複雑なパラメータは、変数として作成するのが困難です。

スクリプト ツールのダイアログ ボックスを開き、パラメータを入力し、コードのデバッグ準備が整った状態で IDE を起動できれば理想的です。これを行うには、次に説明する若干の単純な変更が必要です。

GetParameterAsText() の使用

最初の手順は、sys.argv[] の代わりに GetParameterAsText() を使用するようにスクリプトを変更することです(スクリプト ツールのパラメータの理解の説明を参照)。 この修正はそのままにしておいてかまいません。sys.argv[] を使用してコードを元の状態に戻す必要はありません。

ツールの実行およびデバッグ

  1. [ジオプロセシング] [ジオプロセシング オプション] の順に選択し、[デバッガ](例: PythonWin)を設定します。
    ヒントヒント:

    インストール済みの PythonWin をデバッガとして使用する場合、[デバッガ] 設定の所定のパスはインストール場所に応じて決まりますが、通常は C:\Python27\ArcGIS10.2\Lib\site-packages\pythonwin\Pythonwin.exe に設定されます。

  2. カタログ ウィンドウで、ツールを右クリックし、[デバッグ] をクリックします。
  3. ツールボックスからスクリプト ツールを開き、設定したい任意のパラメータを入力し、[OK] をクリックします。IDE が開くまでに少し時間がかかることがあります。スクリプト コードが表示され、通常の場合と同様に、デバッグ アプリケーションで自由に対話的な操作ができます。
    注意注意:

    [デバッガ] 設定では、スクリプト ツールが常にフォアグラウンドで実行されます。

ブレーク ポイントを設定し、スクリプトでブレーク ポイントまで実行し、デバッガで使用可能な他のオプションを使用することができます。ダイアログ ボックスに入力したパラメータ値は、GetParameterAsText() によって選択されます。

スクリプトの実行中には、スクリプトとアプリケーションの間に通常予期される相互作用が、引き続き発生します。したがって、AddMessage()AddWarning()、または AddError() 関数を使用している場合、これらのメッセージはアプリケーションに表示されます。プログレッサ関数を使用している場合、スクリプトを実行する過程で、ツールのダイアログ ボックスでプログレッサが更新されます。スクリプトの実行が終了したら、デバッガを閉じてアプリケーションに戻ることができます。あるいは、スクリプト ツールのデバッグを再実行する予定がある場合は、デバッガを開いたままにして、ツールの進捗ダイアログ ボックスで [キャンセル] をクリックすることもできます。

関連トピック

5/10/2014