コーディング エラーはなかなか避けられないものです。エラーの発生箇所を見つけるには、大きく分けて次の 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
- PythonWin
- PyScripter
- 商用システム (Wing IDE や PyCharm など)
デバッガを使用する 1 つの方法は、IDE 内でスクリプトを直接開き、すべてのパラメーターに値が設定されるように変更して、デバッグを続行することです。単純な例では、この方法で正しく機能します。ただし、スクリプトがレイヤーまたはテーブル ビューのパラメーターを使用する場合、これらの変数をリアルタイムで作成する必要があります。フィールド マップや空間参照などの複雑なパラメーターは、変数として作成するのが困難です。
スクリプト ツールのダイアログ ボックスを開き、パラメーターを入力し、コードのデバッグ準備が整った状態で IDE を起動できれば理想的です。これを行うには、次に説明する若干の単純な変更が必要です。
GetParameterAsTextの使用
最初の手順は、sys.argv の代わりに GetParameterAsText を使用するようにスクリプトを変更することです。詳細については、「スクリプト ツールのパラメーターの理解」をご参照ください。 この修正はそのまま保持することができます。sys.argv を使用してコードを元の状態に戻す必要はありません。
ツールの実行およびデバッグ
- [ジオプロセシング] > [ジオプロセシング オプション] の順に選択して、[デバッガ] (例: PythonWin) を設定します。
- [カタログ] ウィンドウで、ツールを右クリックし、[デバッグ] をクリックします。
- ツールボックスからスクリプト ツールを開き、設定したい任意のパラメーターを入力し、[OK] をクリックします。IDE が開くまでに少し時間がかかることがあります。スクリプト コードが表示され、通常の場合と同様に、デバッグ アプリケーションで自由に対話的な操作ができます。
ブレーク ポイントを設定し、スクリプトでブレーク ポイントまで実行し、デバッガで使用可能な他のオプションを使用することができます。ダイアログ ボックスに入力したパラメーター値は、GetParameterAsText によって選択されます。
スクリプトの実行中には、スクリプトとアプリケーションの間に通常予期される相互作用が、引き続き発生します。したがって、AddMessage、AddWarning、または AddError 関数を使用している場合、これらのメッセージはアプリケーションに表示されます。プログレッサー関数を使用している場合、スクリプトを実行する過程で、ツールのダイアログ ボックスでプログレッサーが更新されます。スクリプトの実行が終了したら、デバッガを閉じてアプリケーションに戻ることができます。また、スクリプト ツールのデバッグを再実行する予定がある場合は、デバッガを開いたままにして、ツールの進捗状況ダイアログ ボックスで [キャンセル] をクリックすることもできます。