50 votos

¿Depuración de scripts de ArcPy?

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

¿Existen otras opciones, como el establecimiento de puntos de ruptura?

El método de Jason funciona muy bien. Si tienes un error en tu caja de herramientas, como la validación, tu IDE probablemente no será capaz de localizar el problema porque las cajas de herramientas están codificadas. Por lo menos WING no fue capaz de localizarlo.

39voto

Paul Puntos 555

Normalmente los depuradores/IDEs de Python asumen que el script de Python se está ejecutando en el mismo proceso que él mismo, por lo que depurar un script que se ejecuta en ArcMap.exe está fuera de lugar -- necesitas tener suficiente del entorno de scripting de GP arrancado en un script de Python como para depurar con él.

Un método que me ha funcionado muy bien en los últimos años es escribir un sencillo script que sólo llame a la herramienta y utilizarlo como mi script principal en el IDE de Python (Wing o Pythonwin) y tener mis breakpoints establecidos en el archivo .py de la herramienta también abierto en la misma sesión del IDE.

Así que básicamente hago esto:

  1. Obtener el conjunto de entradas que no funcionan en mi herramienta de script
  2. Abra un simple archivo .py en la misma carpeta que el .tbx que llama a la herramienta
  3. Abra el script de llamada y el archivo .py de la herramienta de script en el IDE
  4. Establecer breakpoints en el archivo de la herramienta de script
  5. Ejecutar el script de llamada

Y el guión de mi llamada suele ser bastante sencillo:

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 quieres probarlo y consigues que funcione bien, por favor comparte tus hallazgos.

26voto

Paul Puntos 555

Puedes cambiarlo desde el diálogo de opciones de GP, simplemente apunta a tu ejecutable de elección para el editor/debugger.

GP Settings Dialog

9voto

aditya Puntos 111

Para los usuarios de 10, está claro que el mejor camino a seguir es el post de Jason, que he marcado como la "mejor respuesta". Para los usuarios de 9.3, pude seguir el Instrucciones de soporte de ESRI KB enlazado en el post de Brad para que funcione.

En última instancia, la clave para llegar a la edición por defecto de los scripts python 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 de Pyscripter.exe. Una vez que hice esto, la acción de edición por defecto se configuró para lanzar Pyscripter en lugar de IDLE.

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

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

enter image description here

7voto

Rytmis Puntos 15848

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

import pdb; pdb.set_trace()

0voto

Simon Puntos 135

La forma más directa que he encontrado para depurar mi código es codificar mis entradas en la ruta de un 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 ofrece útiles mensajes de error y/o permite probar fragmentos de código.

Cualquier buen IDE tiene una sonda de depuración que tendrá, en memoria, todo su procesamiento hasta el punto de ruptura actual. Con eso, puedes ver lo que está pasando con los datos. Establece breakpoints donde quieras pausar el script. Utilice breakpoints 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.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X