スクリプト ツールのデバッグ
コーディング エラーはなかなか避けられないものです。エラーの発生箇所を見つけるには、大きく分けて次の 2 つの方法があります。
- 問題の切り分けに役立つように、なんらかの形式の print ステートメントをコードに追加する方法
- 対話型のデバッガを使用する方法
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 としては、次のものが挙げられます。
- Python を使用してインストールされる Python IDE
- Web 上の https://sourceforge.net/projects/pywin32 で入手可能な PythonWin
- http://code.google.com/p/pyscripter で使用可能な PyScripter
- Wing IDE(http://wingware.com)などの商用システム
デバッガを使用する 1 つの方法は、IDE 内でスクリプトを直接開き、すべてのパラメータに値が設定されるように変更して、デバッグを続行することです。単純な例では、この方法で正しく機能します。ただし、スクリプトがレイヤまたはテーブル ビューのパラメータを使用する場合、これらの変数をリアルタイムで作成する必要があります。フィールド マップや空間参照などの複雑なパラメータは、変数として作成するのが困難です。
スクリプト ツールのダイアログ ボックスを開き、パラメータを入力し、コードのデバッグ準備が整った状態で IDE を起動できれば理想的です。これを行うには、次に説明する若干の単純な変更が必要です。
GetParameterAsText() の使用
最初の手順は、sys.argv[] の代わりに GetParameterAsText() を使用するようにスクリプトを変更することです(スクリプト ツールのパラメータの理解の説明を参照)。 この修正はそのままにしておいてかまいません。sys.argv[] を使用してコードを元の状態に戻す必要はありません。
ツールの実行およびデバッグ
- [ジオプロセシング] → [ジオプロセシング オプション] の順に選択し、[デバッガ](例: PythonWin)を設定します。ヒント:
インストール済みの PythonWin をデバッガとして使用する場合、[デバッガ] 設定の所定のパスはインストール場所に応じて決まりますが、通常は C:\Python27\ArcGIS10.2\Lib\site-packages\pythonwin\Pythonwin.exe に設定されます。
- カタログ ウィンドウで、ツールを右クリックし、[デバッグ] をクリックします。
- ツールボックスからスクリプト ツールを開き、設定したい任意のパラメータを入力し、[OK] をクリックします。IDE が開くまでに少し時間がかかることがあります。スクリプト コードが表示され、通常の場合と同様に、デバッグ アプリケーションで自由に対話的な操作ができます。注意:
[デバッガ] 設定では、スクリプト ツールが常にフォアグラウンドで実行されます。
ブレーク ポイントを設定し、スクリプトでブレーク ポイントまで実行し、デバッガで使用可能な他のオプションを使用することができます。ダイアログ ボックスに入力したパラメータ値は、GetParameterAsText() によって選択されます。
スクリプトの実行中には、スクリプトとアプリケーションの間に通常予期される相互作用が、引き続き発生します。したがって、AddMessage()、AddWarning()、または AddError() 関数を使用している場合、これらのメッセージはアプリケーションに表示されます。プログレッサ関数を使用している場合、スクリプトを実行する過程で、ツールのダイアログ ボックスでプログレッサが更新されます。スクリプトの実行が終了したら、デバッガを閉じてアプリケーションに戻ることができます。あるいは、スクリプト ツールのデバッグを再実行する予定がある場合は、デバッガを開いたままにして、ツールの進捗ダイアログ ボックスで [キャンセル] をクリックすることもできます。