Fehler im Code sind unvermeidlich, und es gibt zwei grundlegende Möglichkeiten, Stellen mit Fehlern zu ermitteln:
- Fügen Sie dem Code eine geeignete print-Anweisung hinzu, die Sie beim Eingrenzen des Problems unterstützt.
- Verwenden Sie einen interaktiven Debugger.
Verwenden von print-Anweisungen
Die Verwendung von print-Anweisungen zum Ermitteln von Fehlern ist eine naheliegende und gängige Methode. Da Skriptwerkzeuge Zugriff auf das Fortschrittsdialogfeld des Werkzeugs haben, können Sie das Skript so anpassen, dass es Aufrufe von AddMessage, AddWarning oder AddError enthält. Werte und Prüfpunktmeldungen werden dann im Fortschrittsdialogfeld ausgegeben. Ein anderer Ansatz ist die Verwendung einer unabhängigen Methode wie das Zurückgeben von Meldungen, z. B. die MessageBox-Methode des win32ui-Moduls . Diese Methode zeigt ein Pop-up-Dialogfeld an. Da Sie im Dialogfeld auf OK klicken müssen, um die Ausführung fortzusetzen, können Sie mit dieser Methode das Tempo bei der Ausführung des Skripts bestimmen. Dies ist ein Beispiel für die Verwendung der beiden Methoden:
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")
Verwenden von Debuggern
Die andere Methode umfasst das Verwenden einer integrierten Python-Entwicklungsumgebung (IDE), die das Debuggen unterstützt. Mit Debuggern können Sie Haltepunkte festlegen, auf einzelne Codezeilen zugreifen, aus diesen herausspringen oder diese überspringen und den Inhalt von Variablen untersuchen, ohne dafür den Code ändern zu müssen. Im Vergleich zum Einfügen von print- Anweisungen sind Debugger viel effizienter und ermöglichen in der Regel das Isolieren eines Fehlers.
Beispiele für gängige IDEs sind:
- Python-IDE, die mit Python installiert wird
- PythonWin
- PyScripter
- Kommerzielle Systeme, z. B. Wing IDE und PyCharm
Eine Möglichkeit der Verwendung eines Debuggers ist das direkte Öffnen des Skripts in der IDE. Das Skript wird dann bearbeitet, damit alle Parameter über Werte verfügen, bevor das Debuggen gestartet wird. In einfachen Fällen ist dies meist ausreichend. Wenn das Skript jedoch Layer- oder Tabellensichtparameter verwendet, müssen diese Variablen "on-the-fly" erstellt werden. Komplexe Parameter, wie eine Feldzuordnung oder ein Raumbezug, sind nur schwer in Form von Variablen zu erstellen.
Im Idealfall möchten Sie als Benutzer in der Lage sein, das Dialogfeld für das Skriptwerkzeug zu öffnen, Parameter einzugeben und eine IDE mit dem Code zu starten, der für das Debuggen bereit ist. Dies erreichen Sie durch einige einfache Änderungen, die unten beschrieben sind.
Verwenden von GetParameterAsText
Der erste Schritt besteht darin, das Skript zu ändern, sodass es GetParameterAsText anstelle von sys.argv verwendet, wie unter Parameter der Skriptwerkzeuge beschrieben. Dies ist eine Änderung, die Sie beibehalten können. Es ist nicht erforderlich, den Code wieder auf die Verwendung von sys.argv zurückzusetzen.
Ausführen und Debuggen des Werkzeugs
- Legen Sie unter Geoverarbeitung > Geoverarbeitungsoptionen die Option Debugger (z. B. PythonWin) fest.
- Klicken Sie im Fenster Katalog mit der rechten Maustaste auf das Werkzeug, und wählen Sie Debuggen.
- Öffnen Sie in der Toolbox das Skriptwerkzeug, geben Sie alle Parameter ein, die Sie festlegen möchten, und klicken Sie dann auf OK. Es kann einige Zeit dauern, bis die IDE geöffnet wird. Der Skriptcode wird angezeigt, und Sie können mit der Debug-Anwendung normal interagieren.
Sie können einen Haltepunkt festlegen und das Skript bis zum Haltepunkt ausführen und alle anderen für den Debugger zulässigen Optionen verwenden. Parameterwerte, die Sie im Dialogfeld eingegeben haben, werden von GetParameterAsText erfasst.
Beim Ausführen des Skripts werden alle Interaktionen ausgeführt, die normalerweise zwischen dem Skript und der Anwendung erfolgen. Wenn Sie also Funktionen wie AddMessage, AddWarning oder AddError verwenden, werden diese Meldungen in der Anwendung angezeigt. Falls Sie Verlaufsanzeigefunktionen verwenden, wird die Verlaufsanzeige im Werkzeugdialogfeld aktualisiert, während Sie das Skript durchlaufen. Nachdem das Skript beendet wurde, können Sie zur Anwendung zurückkehren, indem Sie den Debugger schließen. Falls Sie planen, das Skriptwerkzeug ein zweites Mal zu debuggen, können Sie den Debugger geöffnet lassen und im Fortschrittsdialogfeld des Werkzeugs auf Abbrechen klicken.