Solución de problemas ERROR 000989 ¿Error de sintaxis de Python de ArcGIS Field Calculator?

8

Estoy tratando de usar la sintaxis de Python en la calculadora de campo de ArcGIS 10 y estoy completamente confundido. Hasta ahora, los cálculos más básicos me fallan, y no entiendo por qué. Estoy tratando de crear una función para simplemente establecer los valores de todas las celdas en una columna para ser un múltiplo del argumento que paso (quería probar algo simple para probarlo, ya que cualquier cosa más complicada que probé también falló ) ingrese la descripción de la imagen aquí

Sin embargo, los mensajes de error me dicen que mi sintaxis es incorrecta:

ingrese la descripción de la imagen aquí

Pero no puedo entender lo que es incorrecto.


Por otro lado, también me horroriza lo difícil que es escribir python legible en el cuadro de la calculadora de campo, ya que no hay resaltado de sintaxis o sangría clara. Sería más rápido y más fácil escribir un script externo de Python para hacer este cálculo, pero quiero tratar de descubrir cómo funciona esta nueva función dentro del programa.

djq
fuente
44
Simpatizo con su queja sobre la falta de resaltado de sintaxis. También agregaré a eso que el cuadro de texto usa una fuente de ancho variable (en lugar de una fuente de ancho fijo). En lo que a mí respecta, es solo un lugar para pegar código desarrollado y probado en otro lugar (uso PythonWin).
Mike T
1
@ Mike ¿Cómo se maneja la variable de prueba utilizando los datos / variables existentes? Normalmente escribo scripts de Python que son completamente externos (usando Geany). Esperaba ni siquiera tener que escribir funciones en el code-block; Solo quería una forma rápida de hacer un cálculo más complicado quea + b
djq
Yo uso PythonWin para todo (desde Python Win32 ). Mi flujo de trabajo sería desarrollar un script en un archivo (p def test(var1): return var1*2. Ej. ), Luego copiar el bloque de código y hacer clic derecho en la ventana interactiva seleccionando "Ejecutar código de Python desde el portapapeles", luego probar / depurar la función con posibles valores para var1(p. Ej., test(4)debería devolver 8). Es un método puro de Python para desarrollar y probar el bloque de código antes de introducirlo en ArcGIS.
Mike T

Respuestas:

12

Puede ser porque está usando un nombre de campo donde debe ir un nombre de parámetro.

En cambio, intente algo como:

def avg(paramName):
    return 10
Michael Todd
fuente
66
La !field!convención solo funciona dentro de la expresión, no en el bloque de código. También puede simplemente poner 10como expresión y dejar el bloque de código en blanco.
Jason Scheirer
Acabo de actualizar mi ejemplo, aunque todavía recibo un error. @ Jason Me doy cuenta de que podría dejar el bloque de código en blanco, pero quiero hacer un cálculo más complicado una vez que entiendo cómo funciona esto.
djq
Aún tienes un !field!bloque de código.
Jason Scheirer
9

Como Jason Scheirer comentó, ¡no puedes usar el campo! dentro de la lógica previa al script.

Pre Script Logic:

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

avg_miles =

demo(!hshld_2000!,10)

Nota: Un "truco" que puede usar para simplificar este desastre ... Puede usar la ventana de Comando interactiva en ArcMap para crear y probar el código de Python (como definir métodos). Una vez que las cosas funcionen, puede hacer referencia a un método de Python creado en la ventana interactiva desde la ventana Calcular campo.

James Schek
fuente