Depurar herramientas de secuencias de comandos
Los errores en el código son inevitables, y hay dos métodos básicos para saber dónde se han producido:
- Agregar algún tipo de declaración print para ayudarle a aislar el problema.
- Usar un depurador interactivo.
Usar declaraciones print
El uso de declaraciones print para describir errores en el código es un método evidente y común. Dado que las herramientas de secuencia de comandos tienen acceso al cuadro de diálogo de progreso, puede editar su secuencia de comandos para que incluya llamadas a AddMessage(), AddWarning() o AddError() para imprimir valores y mensajes de punto de comprobación al cuadro de diálogo de progreso. Otra opción es utilizar un método independiente de mensajes de devolución, como el método del MessageBox del módulo win32ui. Este método muestra un cuadro de diálogo emergente. Dado que tiene que hacer clic en Aceptar en el cuadro de diálogo para continuar la ejecución, este método permite controlar la ejecución de la secuencia de comandos paso a paso. A continuación se muestra un ejemplo de uso de ambos métodos:
import arcpy import win32ui import win32con n = 5 # Print message to progress dialog # arcpy.AddMessage("Value of n = " + str(n)) # Issue a popup dialog with OK and Cancel button # val = win32ui.MessageBox("Value of n = " + str(n), "title", win32con.MB_OKCANCEL) # Based on the button clicked, you can branch execution # if val == 1: arcpy.AddMessage("You clicked OK") else: arcpy.AddError("You clicked Cancel") raise arcpy.ExecuteError, "Execution stops due to Cancel button click" arcpy.AddMessage("This statement reached")
Usar depuradores
El otro método consiste en usar un entorno de desarrollo integrado (IDE) de Python que admita depuración. Los depuradores permiten establecer puntos de corte, entrar, salir y situarse sobre líneas de código individuales, así como examinar el contenido de las variables, todo ello sin modificar el código. Comparados con la inserción de declaraciones print, los depuradores son muchos más eficientes y normalmente le permite aislar el error rápidamente.
Entre las IDE más comunes se encuentran:
- El IDE que se instala con Python
- PythonWin, disponible en la Web en https://sourceforge.net/projects/pywin32
- Sistemas comerciales, como Wing IDE (http://wingware.com)
PythonWin se incluye en los soportes de instalación, pero no se instala de manera predeterminada. Si no puede acceder a los soportes de instalación, también puede acceder a la instalación de PythonWin instalación desde el proyecto Python for Windows extensions.
Una forma de usar un depurador es abrir sus secuencias de comandos directamente en el IDE, modificarlo de forma que todos los parámetros tengan valores, y luego continuar con depurar. Esto funciona razonablemente bien en casos sencillos. No obstante, si su secuencia de comandos utiliza parámetros de visualización de capa o tabla, estas variables deben crearse en el momento. Los parámetros complejos, como un mapa de campo o una referencia espacial son difíciles de crear como variables.
Lo ideal para usted es poder abrir su cuadro de diálogo herramienta de secuencia de comandos, introducir los parámetros y hacer que se inicie un IDE con su código listo para ser depurado. Puede hacer esto con unos pocos cambios, que se describen a continuación.
Usar GetParameterAsText()
El primer paso es modificar su secuencia de comandos para que utilice GetParameterAsText() en lugar de sys.argv[], como vimos en Entender los parámetros de la herramienta de secuencia de comandos. Esta es una modificación que puede conservar, no es necesario volver a cambiar el código para usar sys.argv[].
Ejecutar y depurar su herramienta
- Configurar el depurador (como PythonWin) en Geoprocesamiento > Opciones de geoprocesamiento.Sugerencia:
Si tiene instalado PythonWin y desea utilizarlo como su depurador, la configuración de la ruta adecuada para el depurador dependerá de sus instalación, pero probablemente será C:\Python26\ArcGIS10.0\Lib\site-packages\pythonwin\Pythonwin.exe.
- En la ventana deCatálogo, haga clic con el botón derecho del ratón en su herramienta y haga clic en Depurar.
- Abra la herramienta de secuencia de comandos desde la caja de herramientas, introduzca los parámetros que desee configurar y, a continuación, haga clic en Aceptar. El IDE puede tardar algunos momentos en abrirse. Se muestra el código de su secuencia de comandos y puede interactuar libremente con la aplicación de depuración como haría normalmente.Nota:
El ajuste de Depurador siempre ejecuta las herramientas de secuencia de comandos en primer plano.
Puede establecer un punto de interrupción y dejar que la secuencia de comandos se ejecute hasta el mismo, así como usar otras opciones que permita el depurador. A los valores de parámetro introducidos en el cuadro de diálogo los escoge GetParameterAsText().
Al ejecutar la secuencia de comandos, se seguirá produciendo cualquier interacción que esperaría normalmente entre la secuencia de comandos y la aplicación. Así, si está usando funciones como AddMessage(), AddWarning(), o bien, AddError(), estos mensajes aparecerán en la aplicación. Si utiliza las funciones de progressor, éste se actualizará en el cuadro de diálogo de la herramienta a medida que avance por la secuencia de comandos. Una vez terminada la secuencia de comandos, puede volver a la aplicación cerrando el depurador. O bien, si tiene la intención de depurar su herramienta de secuencia de comandos una segunda vez, puede mantener el depurador abierto y hacer clic en Cancelar en el cuadro de diálogo de progreso de la herramienta.