Cómo depurar código Python con PyScripter En este post vamos a daros las claves para aprovechar el uso de PyScripter como editor de código de Python para ArcGIS, tanto para escribir código como para la detección y corrección de errores de programación. Ventajas de usar PyScripter Utiliza diferentes colores, indenta y comenta el código de modo rápido, subraya una palabra determinada, busca y reemplaza, etc. Es personalizable: colores, plantillas, fragmentos completos de código, etc. Tiene predicción de código fuente, que agiliza nuestro trabajo y evita que cometamos errores de escritura. Las ventanas del IDE y de depuración, entre las que destacamos la ventana de Variables y la ventana Intérprete ayudan durante la ejecución del script al seguimiento del código. La utilización de un IDE como PyScripter facilita el trabajo y reduce la posibilidad de introducir errores en nuestros programas. Aún así cometeremos fallos, sobre todo al principio, que es cuando precisamente más nos van a entorpecer. ¿Cómo reparar nuestros errores? Un 50% del error se soluciona cuando descubrimos DONDE ESTÁ EL ERROR. El otro 50% se soluciona cuando descubrimos POR QUÉ SE HA PRODUCIDO EL ERROR. Respecto al primer punto, para localizar el error debemos aprender a DEPURAR EL CÓDIGO. PyScripter cuenta con una barra de herramientas de depuración: Depurar código: Opción 1 –> ejecutando línea por línea: usaremos esta opción cuando creamos saber dónde está el error, para parar en ese punto y examinar el comportamiento del programa, los valores que adoptan las variables, etc. 1.1 Situando el cursor en la línea del script en la que queremos interrumpir la ejecución automática y pulsando la flecha azul “Ejecutar hasta el cursor” o F4. A partir del punto de interrupción cada línea de código se ejecutará cuando el usuario pulse el icono “Avanzar hasta la siguiente línea” o F8, de este modo localizamos la sentencia que falla y los valores que el programa está interpretando. 1.2 Fijando nuestros puntos de interruptor con el círculo rojo “Conmutar punto de parada” o F5 sobre cada línea en la que queramos conmutar parada y pulsando la flechita verde con bicho“Depurar” o F9. Depurar código: Opción 2 –> ejecutando fragmentos de código: utilizaremos esta opción cuando sabemos que el programa funciona antes de haber incluido nuevas sentencias, y queremos comprobar el funcionamiento de las mismas sin tener que ejecutar para ello el script completo. Resaltando las líneas que nos interesan y pulsando Ctl+F7, o con botón derecho Source Code/Ejecutar Selección. ¿Cómo capturar los errores? En cuanto a la segunda cuestión: porqué ha fallado nuestro programa, podemos “capturar el error” y mostrarlo en la ventana Intérprete de PyScripter. Para ello tendremos que utilizar la estructura try & except . Con esta estructura el programa intenta (try) ejecutar todo el código que se encuentre indentado dentro del bloque try:. Si se produce un fallo, el código se dirige al bloque except: en el que se mostrará el mensaje de error generado. ¿Cuales son los errores más típicos y cómo se interpretan? El siguiente listado muestra los errores más típicos y el mensaje de error que muestra la ventana intérprete: 1.- Case Sensitive: Python diferencia las mayúsculas y minúsculas. Ojo con darle un nombre a una variable y pretender usarla llamándola de otro modo. El mensaje de error que se genera depende del la palabra en la que se encuentre la confusión: si se trata del nombre de una capa o de una ruta, el mensaje mostrado nos dirá que no existe dicha capa o que no se localiza: “Input Features: xxx.shp does not exist or is not supported”. Puede incluso no generarse ningún error, pero no darnos la respuesta que queremos. 2.- Indentación: en Python cada bloque de código debe ir sangrado para que el intérprete lo identifique y diferencie. Los fallos de indentación detectados quedan marcados en rojo, además si intentamos ejecutar el script se mostrará el mensaje “IndentationError: expected an indented block”. Ojo, puede que el código funcione, pero una frase mal indentada puede cambiar el curso del programa y su resultado. 3.- Importación de módulos. Antes de trabajar con alguna herramienta de una librería específica debemos importar esta librería. En nuestro caso, si queremos trabajar con la ArcPy para ArcGIS debemos incluir al principio del programa un “import ArcPy” El mensaje de error que nos da en caso de no haber importado la Arcpy es “name ‘arcpy’ is not defined” 4.-Símbolo de igualdad y símbolo de asignación de valor. Cuando Python quiere darle un valor a una variable lo hace a través del símbolo “=”. Cuando queremos comprobar si un valor es igual a otro utilizaremos el símbolo “==”. El mensaje de error en una sentencia como “if coordX = 3500:” será “SyntaxError: invalid syntax”. 5.- Condiciones y bucles mal construidos. Además de la indentación del código, estas construcciones requieren que la primera frase finalice con el símbolo “:”. El mensaje de error en una sentencia como “if coordX = =3500” será igualmente “SyntaxError: La sentencia correcta es: invalid syntax”. if coordX = =3500: coordY = 47000 6.- Incorrecta definición de una ruta. En Python la contrabarra “\” forma parte de sentencias clave como “\n” (nueva línea) o “\t” (tabulador). Una ruta debe precederse de la letra “r” o sustituir el símbolo “\” por “\\” o por “/”. Ojo además con los acentos, los espacios en blanco y las mayúsculas y minúsculas. El mensaje de error puede ser si se trata de la ubicación de una capa Features: “Input xxx.shp does not exist or is not supported”, o si se trata de la identificación de un espacio de trabajo, en cuyo caso, puede tomar un valor como nulo y por tanto no localizar los datos de ese workspace. 7.- Parámetros mal introducidos: en número o en orden. Centrándonos en el uso de herramientas de ArcGIS, aunque también es un error típico de otro tipo de funciones, debemos saber qué argumentos requiere cada herramienta, de qué tipo son y en qué orden deben introducirse. El mensaje de error que se genera en este caso es “Failed to execute. Parameters are not valid.” Si te ha gustado nuestro post de hoy compártelo y ayúdanos a seguir, muchas gracias!!