10 errores cuando comenzamos a trabajar con PyQGIS

Errores al trabajar con PythonEn este post vamos a mostraros los errores más típicos y el mensaje de error que obtenemos cuando comenzamos a trabajar con PyQGIS.

Aunque nos centramos en el lenguaje de programación python en el entorno de QGIS, todos estos errores se pueden aplicar también a Python para ArcGIS, ya que tanto QGIS como ArcGIS compraten el mismo lenguaje de programación para automatizar tareas.

La API de ArcPy puede resultar más fácil de entrada, pero con QGIS (y su  API) se puede llegar más lejos, abarca y profundiza más objetos, y sin necesidad de pagar una licencia puedes llegar a hacer y utilizar aplicaciones fuera de QGIS en combinación con QT designer (que es el que se encarga de la interfaz gráfica).

PyQGIS es más complejo, más amplio y quizás por este motivo más complicado aprender por uno mismo, así que hemos pensado que este listado con los errores más típicos y el mensaje de error que muestra la consola de Python de QGIS, puede ayudar a los que se inician a programar con este lenguaje:

1. Errores de sintaxis

Es el error más común, puesto que se trata de un despiste al introducir las sentencias es fácil omitir alguna letra, o alterar el orden de las letras, ¿vredad?. Por lo tanto debemos prestar especial atención a la hora de teclear y el primer aspecto a revisar cuando un script produce un error.

El segundo punto que trataremos es derivado de éste primero:

2. Python diferencia las mayúsculas y minúsculas

Python diferencia las mayúsculas y minúsculas, en inglés Case Sensitive.

El mensaje de error que se genera depende de 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.

Si utilizamos un método con mayúsculas también arrojará un error:

En color azul el método escrito correctamente. En verde escrito de forma errónea.

3. 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 con una admiración, además si intentamos ejecutar el script se mostrará el mensaje “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.

4. 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 librería de análisis espacial de QGIS debemos incluir al principio del programa:

from qgis.analysis import *

Ejemplo:

Vemos como si intentamos utilizar la clase QgsGeometryAnalyzer sin haber importado la librería previamente obtenemos un error. Este error desaparece realizando la importación de la librería como paso previo a la utilización de una de sus clases.

El mensaje de error que nos da en caso de no haber importado la librería es:

NameError: name ‘QgsGeometryAnalyzer’ is not defined

5. Variables mal creadas

Para escribir un código que sea más complejo, necesitamos una forma de ‘guardar’ los valores de nuestro código. Esto lo hacemos definiendo una variable con un nombre específico, que distingue entre mayúsculas y minúsculas.

El nombre de una variable debe comenzar por letra, _ o $

Por lo tanto el nombre de una variable no debe comenzar por números, porque crearía un error de ejecución. Tampoco podemos poner como nombre a una variable una palabra reservada.

Las variables son sensibles a mayúsculas y minúsculas. Así que ojo con darle un nombre a una variable y pretender usarla llamándola de otro modo:

layer y Layer son variables distintas.

6. 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”.

7. 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 not layer.isValid()” será  igualmente “invalid syntax”.

La sentencia correcta es:

8. 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.

Mensajes de error:

Si se trata de la ubicación de una capa:

Input Features:  xxx.shp does not exist or is not supported

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:

Ruta de la capa especificada con errores
Ruta de la capa sin errores ya que hemos introducido el comando r antes de la misma.

9. Guardar el script en una ruta con espacios

El script debe tener extensión .py, y debe ubicarse en una ruta sin espacios ni acentos.

10. Parámetros mal introducidos: en número o en orden

Debemos saber qué argumentos requiere cada herramienta, de qué tipo son y en qué orden deben introducirse.

Por ejemplo si queremos ejecutar un buffer en PyQGIS:

En la ayuda vemos la sintaxis y argumentos.

Vamos a hacer un buffer. Esta operación requiere 3 argumentos obligatorios:

  • Capa de entrada.
  • Capa de salida.
  • Radio del buffer.

El resto de los argumentos son opcionales.

Ejecutamos la siguiente sentencia en la consola de python:

QgsGeometryAnalyzer().buffer(layer,r’C:\CURSO_PYQGIS\CAPAS_PROCESADAS\ciudades_buff.shp’,0.1)

Pero ¿qué ocurre si omitimos algún argumento obligatorio?

El mensaje de error que se genera en este caso es

Not enough arguments.

 Si quieres aprender más sobre Python y QGIS apúntate ya a nuestro curso online de PyQGIS.

Let’s connect!

Date de alta en nuestra newsletter
y recibe este ebook gratuito

Y una vez al mes recibirás las últimas novedades del sector GIS y de nuestros cursos

3 comentarios en «10 errores cuando comenzamos a trabajar con PyQGIS»

  1. Hola Aurelio,

    En Javascript tampoco es necesario declarar las variables. Es una buena costumbre, pero no es obligatorio.

    • Gracias por el aviso Eu, Tienes razón en python no se declaran las variables y por supuesto en PyQGIS tampoco. En JavaScript sí, pero en Python no. Ya está corregido el artículo. Saludos!

Los comentarios están cerrados.