En 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:
Índice
- 1. Errores de sintaxis
- 2. Python diferencia las mayúsculas y minúsculas
- 3. Indentación
- 4. Importación de módulos
- 5. Variables mal creadas
- 6. Símbolo de igualdad y símbolo de asignación de valor
- 7. Condiciones y bucles mal construidos
- 8. Incorrecta definición de una ruta
- 9. Guardar el script en una ruta con espacios
- 10. Parámetros mal introducidos: en número o en orden
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:

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

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:
if not layer.isValid(): print "la capa no es correcta"
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:


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.
Licenciado en Geografía. Máster en Sistemas de Información Geográfica. Consultor GIS desde el año 2004. En MappingGIS desde el año 2012 para ayudarte a impulsar tu perfil GIS y diferenciarte de la competencia. Echa un vistazo a todos nuestros cursos de SIG online.
Hola Aurelio,
En Javascript tampoco es necesario declarar las variables. Es una buena costumbre, pero no es obligatorio.
No soy un experto en python, pero creo que las variables no se declaran. Se trata de una pecularidad de pyqgis? Gracias
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!