¿Depurando los scripts de ArcPy?

48

He escrito muchos scripts de Python usando ArcPy en ArcGIS 10, y hasta ahora mi único medio de depuración está restringido a imprimir mensajes en la ventana de resultados de geoprocesamiento usando arcpy.AddMessage() .

¿Hay otras opciones por ahí, como establecer puntos de ruptura?

El método de Jason funciona muy bien. Si tiene un error en su caja de herramientas, como la validación, su IDE probablemente no podrá identificar el problema porque las cajas de herramientas están codificadas. Al menos WING no pudo identificarlo.

    
pregunta Tanner 02.03.2011 - 20:32

5 respuestas

36

Por lo general, los depuradores / IDE de Python asumen que el script de Python se ejecuta en el mismo proceso que el propio, por lo que la depuración de un script que se ejecuta en ArcMap.exe está fuera de juego. puedes depurar con.

Un método que me ha funcionado muy bien durante los últimos años es escribir un script simple que simplemente llame a la herramienta y usarlo como mi script principal en el IDE de Python (Wing o Pythonwin) y tener mis puntos de interrupción establecidos en el El archivo .py de la herramienta también se abre en la misma sesión IDE.

Así que básicamente hago esto:

  1. Obtenga el conjunto de entradas que no funcionan en mi herramienta de script
  2. Abra un archivo .py simple en la misma carpeta que .tbx que llama a la herramienta
  3. Abra el script de la persona que llama y el archivo .py de la herramienta de script en el IDE
  4. Establecer puntos de interrupción en el archivo de herramientas de script
  5. Ejecutar el script de la persona que llama

Y el script de mi interlocutor suele ser bastante simple:

import os
import arcpy
arcpy.ImportToolbox(os.path.join(os.path.dirname(__file__), 'my.tbx'))
arcpy.MyToolThatIsFailing_myalias("inputs", "that", "don't" "work")

He intentado winpdb para depurar los scripts que se ejecutan en ArcMap, pero nunca he tenido suerte. Si quiere probarlo y funciona bien, comparta sus hallazgos.

    
respondido por el Jason Scheirer 02.03.2011 - 20:59
25

Puedes cambiarlo desde el cuadro de diálogo de opciones de GP, solo apunta al ejecutable de tu elección para editor / depurador.

    
respondido por el Jason Scheirer 07.04.2011 - 22:18
9

Para los usuarios de 10, claramente la mejor ruta es la publicación de Jason, que marqué como la "mejor respuesta". Para los usuarios de 9.3, pude seguir las instrucciones de soporte de ESRI KB vinculadas en la publicación de Brad en Haz que funcione.

Finalmente, la clave para obtener la edición predeterminada de los scripts de PyGon de ArcGIS en Pyscripter fue editar la "acción" del sistema para los "tipos de archivos registrados" que terminan en archivos * .py (paso # 4). Creé un nuevo tipo de acción "Editar" y luego incluí la ruta Pyscripter.exe. Una vez que hice esto, la acción de edición predeterminada se configuró para iniciar Pyscripter en lugar de IDLE.

La cadena que usé (porque estaba cortada en el cuadro de diálogo que se muestra a continuación) es:

"C:\Program Files\PyScripter\PyScripter.exe" "%1"

    
respondido por el RyanDalton 07.04.2011 - 22:41
7

No sé cómo funcionará con arcpy, pero puedes probar pdb :

import pdb; pdb.set_trace()
    
respondido por el nw1 02.03.2011 - 20:36
0

La forma más directa que he encontrado para depurar mi código es codificar mis entradas a la ruta de archivo de un conjunto de datos existente. Por ejemplo:

import arcpy

# parameters for script
#input1 = arcpy.GetParameterAsText(0) # layer
#input2 = arcpy.GetParameterAsText(1) # folder

# debugging parameters
input1 = r"path/to/your/data.shp"
input2 = r"path/to/your/folder"

Además de la ventana de resultados, la ventana de python muestra mensajes de error útiles y / o le permite probar fragmentos de código.

Cualquier IDE bueno tiene una sonda de depuración que tendrá, en la memoria, todo su procesamiento hasta el punto de interrupción actual. Con eso, puedes ver lo que está pasando con los datos. Establezca puntos de interrupción donde desee pausar la secuencia de comandos. Utilice puntos de interrupción condicionales si desea detener un bucle en una iteración específica. Además, conozca sus versiones de Arc y qué funciones están disponibles para esas versiones.

    
respondido por el gisdude 29.11.2016 - 23:13

Lea otras preguntas en las etiquetas