Fehlerbehebung FEHLER 000989 Python-Syntaxfehler von ArcGIS Field Calculator?

8

Ich versuche, die Python-Syntax im Feldrechner von ArcGIS 10 zu verwenden, und bin völlig verwirrt. Bisher scheitern die grundlegendsten Berechnungen an mir, und ich verstehe nicht warum. Ich versuche, eine Funktion zu erstellen, mit der nur die Werte aller Zellen in einer Spalte als Vielfaches des von mir übergebenen Arguments festgelegt werden (ich wollte etwas Einfaches ausprobieren, um es zu testen, da alles, was ich versucht habe, auch fehlgeschlagen ist ). Geben Sie hier die Bildbeschreibung ein

Die Fehlermeldungen sagen mir jedoch, dass meine Syntax falsch ist:

Geben Sie hier die Bildbeschreibung ein

aber ich kann nicht verstehen, was falsch ist.


Abgesehen davon bin ich auch entsetzt darüber, wie schwierig es ist, lesbares Python in das Feldrechnerfeld zu schreiben, da es keine Syntaxhervorhebung oder klare Einrückung gibt. Es wäre schneller und einfacher, ein externes Python-Skript zu schreiben, um diese Berechnung durchzuführen, aber ich möchte versuchen, herauszufinden, wie diese neue Funktion innerhalb des Programms funktioniert.

djq
quelle
4
Ich sympathisiere mit Ihrer Beschwerde über das Fehlen einer Syntaxhervorhebung. Ich werde auch hinzufügen, dass das Textfeld eine Schriftart mit variabler Breite verwendet (anstelle einer Schriftart mit fester Breite). Für mich ist es nur ein Ort zum Einfügen von Code, der an anderer Stelle entwickelt und getestet wurde (ich verwende PythonWin).
Mike T
1
@Mike Wie gehen Sie mit dem Testen von Variablen unter Verwendung der vorhandenen Daten / Variablen um? Normalerweise schreibe ich Python-Skripte, die vollständig extern sind (mit Geany). Ich hatte gehofft, nicht einmal Funktionen in die schreiben zu müssen code-block; Ich wollte nur eine schnelle Art und Weise eine komplizierte Berechnung zu tun , alsa + b
djq
Ich benutze PythonWin für alles (von Python Win32 ). Mein Workflow wäre, ein Skript in einer Datei zu entwickeln (z. B. def test(var1): return var1*2), dann den Codeblock zu kopieren und mit der rechten Maustaste in das interaktive Fenster zu klicken, indem Sie "Python-Code aus der Zwischenablage ausführen" auswählen und dann die Funktion mit möglichen Werten für var1(z. test(4)sollte 8) zurückgeben. Es ist eine reine Python-Methode zum Entwickeln und Testen des Codeblocks, bevor er in ArcGIS eingeführt wird.
Mike T

Antworten:

12

Dies kann daran liegen, dass Sie einen Feldnamen verwenden, in den ein Parametername eingefügt werden soll.

Versuchen Sie stattdessen etwas wie:

def avg(paramName):
    return 10
Michael Todd
quelle
6
Die !field!Konvention funktioniert nur innerhalb des Ausdrucks, nicht im Codeblock. Sie können auch einfach 10als Ausdruck einfügen und den Codeblock leer lassen.
Jason Scheirer
Ich habe gerade mein Beispiel aktualisiert - es wird jedoch immer noch ein Fehler angezeigt. @Jason Mir ist klar, dass ich den Codeblock leer lassen könnte, aber ich möchte eine kompliziertere Berechnung durchführen, sobald ich verstanden habe, wie das funktioniert.
DJQ
Sie haben noch einen !field!in Ihrem Codeblock.
Jason Scheirer
9

Wie Jason Scheirer kommentierte, können Sie! Field nicht verwenden! innerhalb der Pre-Script-Logik.

Pre-Script-Logik:

def demo(value, arg):
   return value * arg

avg_miles =

demo(!hshld_2000!,10)

Hinweis: Ein "Trick", mit dem Sie dieses Durcheinander vereinfachen können ... Sie können das interaktive Befehlsfenster in ArcMap verwenden, um Python-Code zu erstellen und zu testen (z. B. Methoden definieren). Sobald Sie die Dinge zum Laufen gebracht haben, können Sie im Fenster "Feld berechnen" auf eine Python-Methode verweisen, die im interaktiven Fenster erstellt wurde.

James Schek
quelle