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 arcpy.AddMessage()
.
¿Existen otras opciones, 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.
arcpy
arcgis-10.0
debugging
Curtidor
fuente
fuente
Respuestas:
Por lo general, los depuradores / IDE de Python asumen que el script de Python se está ejecutando en el mismo proceso que él mismo, por lo que la depuración de un script que se ejecuta en ArcMap.exe es inmediata: debe obtener suficiente del entorno de scripting GP arrancado en un script de Python como pueda para depurar con.
Un método que me ha funcionado muy bien en los últimos años es escribir un script simple que simplemente llame a la herramienta y usarlo como mi script principal en Python IDE (Wing o Pythonwin) y tener mis puntos de interrupción establecidos en la herramienta .py El archivo también se abre en la misma sesión IDE.
Entonces básicamente hago esto:
Y mi script de llamada suele ser bastante simple:
He intentado winpdb para depurar scripts que se ejecutan en ArcMap pero nunca he tenido suerte. Si quiere probarlo y consigue que funcione bien, comparta sus hallazgos.
fuente
Puede cambiarlo desde el diálogo de opciones de GP, solo apunte a su ejecutable de elección para editor / depurador.
fuente
Para los usuarios de 10 años, 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 para que funcionara.
En última instancia, la clave para acceder a la edición predeterminada de los scripts de Python de ArcGIS en Pyscripter era editar la "acción" del sistema para "tipos de archivos registrados" que terminaban 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 utilicé (porque se cortó en el cuadro de diálogo que se muestra a continuación) es:
fuente
No sé cómo funcionará esto con arcpy, pero puedes probar pdb :
fuente
La forma más directa que he encontrado para depurar mi código es codificar mis entradas en la ruta del archivo de un conjunto de datos existente. Por ejemplo:
Además de la ventana de resultados, la ventana de Python genera mensajes de error útiles y / o le permite probar fragmentos de código.
Cualquier buen IDE tiene una sonda de depuración que tendrá, en la memoria, todo su procesamiento hasta el punto de interrupción actual. Con eso, puede ver lo que está sucediendo con los datos. Establezca puntos de interrupción donde desee pausar el script. Use 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.
fuente