Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Como programador, seguro que se encuentra con errores mientras desarrolla software. Esto puede ir desde errores en su lógica que conducen a resultados inesperados, errores derivados de la violación de las reglas de un lenguaje de programación, hasta incluso errores que surgen mientras ejecuta su programa, entre muchos otros. Estos errores se conocen comúnmente como bugs.

Los bugs son omnipresentes en todos los lenguajes de programación, independientemente de lo fácil que sea aprender o utilizar el lenguaje.

En Python, por ejemplo, aunque el lenguaje hace hincapié en la legibilidad, sigue siendo una sintaxis expresiva y se considera relativamente fácil de aprender y utilizar en comparación con otros lenguajes de programación, aún así no es inmune a los errores de programación cuando utiliza Python.

Dado que es inevitable que se produzcan errores, una buena forma de afrontarlos es conocer los distintos tipos de errores que pueden producirse y cómo se producen. Esto le permitirá evitar o minimizar estos errores mientras programa y también saber cómo manejarlos cuando surjan.

Estos son algunos de los errores comunes de Python que puede encontrar mientras programa utilizando el lenguaje:

Errores de sintaxis

Un error de sintaxis es un error que surge cuando se escribe código que viola las reglas del lenguaje de programación que está utilizando. El resultado es una línea de código no válida.

En Python, por ejemplo, cuando se imprime una cadena, es necesario ponerla entre comillas. Si no lo hace, se produce un error de sintaxis.

Un error de sintaxis también puede surgir cuando se omiten los paréntesis de apertura o cierre, los corchetes o las llaves, cuando se escriben mal las palabras clave o los nombres de las funciones, cuando se omiten los dos puntos al final de las sentencias de control de flujo o cuando se omiten los operadores requeridos en las expresiones.

Generalmente, los errores de sintaxis surgirán si viola una regla sobre cómo debe escribirse el código Python.

## Error de sintaxis por falta de comillas
## alrededor de la cadena que se imprime
print("Hola Mundo)

age = 20
## Error de sintaxis por falta de dos puntos en una sentencia if
if age > 18
 print("La edad es superior a 18")

## Error de sintaxis porque '(' nunca se cerró
def cuadrado(x:
 return x * x
print(cuadrado(4))

Al ejecutar el código anterior, se encontrará con un mensaje de error como el que se muestra a continuación:

Screenshot-from-2023-06-01-19-45-08

El mensaje de error al ejecutar el código es el siguiente:

 Archivo "/home/madici/Desktop/helloworld.py", línea 1
 print("Hola Mundo)
 ^
SyntaxError: unterminated string literal (detected at line 1)

Para solucionar estos errores, utilice la sintaxis correcta de Python como se muestra a continuación:

print("Hola Mundo")

edad = 20
si edad > 18:
 print("La edad es superior a 18")

def cuadrado(x):
 return x * x
print(cuadrado(4))

Error de sangría

A diferencia de otros lenguajes como Java, C o C , que utilizan llaves para separar bloques de código, Python utiliza la sangría para definir la jerarquía y la estructura de los bloques de código. Por ejemplo, al escribir sentencias de control en Java, todo el código a ejecutar una vez evaluada la condición está contenido dentro de llaves.

En Python, sin embargo, el bloque de código estará sangrado. Una sangría típica en Python consiste en cuatro espacios o una tabulación. Sin embargo, el número de espacios no importa mientras se mantenga consistente a lo largo de todo el código que se escriba.

Como programador de Python, es probable que se encuentre con errores de indentación cuando no añada la indentación requerida, como al escribir sentencias de control o funciones, cuando utilice tanto tabuladores como espacios para crear indentaciones ya que confunde al intérprete, cuando coloque las indentaciones en el lugar equivocado o cuando sus indentaciones no sean consistentes a lo largo de su código base.

A continuación se muestra un ejemplo de código que da lugar a un error de sangría:

edad = 20
si edad > 18:
print("La edad es mayor de 18")
 print("Tiene permiso para conducir")
else:
 print("La edad es menor de 18")

A continuación se muestran los mensajes de error resultantes del código anterior:

Screenshot-from-2023-06-04-11-21-59

El mensaje de error resultante de ejecutar el código es el siguiente:

 Archivo "/home/madici/Desktop/helloworld.py", línea 3
 print("La edad es mayor de 18")
 ^
IndentationError: expected an indented block after 'if' statement on line 2

Para corregir los errores indente la línea después de la sentencia si ya que se requiere una indentación y asegúrese de que coincida con la indentación en el resto del código como se muestra a continuación:

age = 20
if age > 18:
 print("La edad es superior a 18")
 print("Tiene permiso para conducir")
else:
 print("La edad es inferior a 18")

TypeError

En Python, un TypeError es una excepción que surge cuando se intenta realizar una operación utilizando un tipo de datos incompatible. Por ejemplo, si intenta sumar una cadena y un entero o concatenar un tipo de datos cadena con un entero, se encontrará con un TypeError.

También puede encontrarse con TypeErrors cuando utilice funciones o métodos con tipos de datos incorrectos, cuando intente utilizar un índice no entero para acceder a elementos de un iterable como una lista, o cuando intente iterar a través de un objeto que no puede ser iterable.

En general, cualquier operación que utilice un tipo de datos incorrecto provocará un TypeError.

A continuación se muestran ejemplos de operaciones que pueden dar lugar a TypeErrors:

# Error de tipo resultante de concatenar una cadena un entero
edad = 25
mensaje = "Tengo " edad " años."


list1 = [1, "hola", 5, "mundo", 18, 2021]
#Errores de tipo resultantes de un uso incorrecto de builtin en los métodos
print(sum(list1))

#Error de tipo resultante de sumar una cadena y un entero
num1 = 10
num2 = "16"
print(num1 num2)

#Error de tipo resultante de utilizar un índice no entero
list2 = ["hola", "de", "el", "otro", "lado"]
print(list2["1"])

A continuación se muestran los mensajes de error resultantes del código anterior:

Screenshot-from-2023-06-04-11-57-37

A continuación se muestra un ejemplo de mensaje TypeError del código:

 File "/home/madici/Desktop/helloworld.py", line 3, in <module>
 message = "Tengo " edad " años."
             ~~~~~~~~^~~~~
TypeError: can only concatenate str (not "int") to str

Para eliminar los errores, utilice los tipos de datos correctos o conversiones de tipo como se muestra a continuación:

edad = 25
mensaje = "Tengo " str(edad) " años."

lista1 = [1, 5, 18, 2021]
print(suma(lista1))

num1 = 10
num2 = "16"
print(num1 int(num2))

lista2 = ["hola", "de", "el", "otro", "lado"]
print(lista2[1])

AttributeError

En Python, se produce un AttributeError cuando se intenta utilizar un atributo que no existe en el objeto o llamar a un método que no existe en el objeto sobre el que se llama. Un AttributeError muestra que un objeto no tiene un atributo o método al que se está llamando en él.

Por ejemplo, si llama a un método de cadena sobre un número entero, se encontrará con un AttributeError porque el método no existe en el tipo de objeto sobre el que se está llamando.

En el ejemplo que se muestra a continuación, el método capitalize(), que se utiliza para convertir la primera letra de una cadena a mayúsculas, está siendo llamado sobre un entero. El resultado es un error de atributo porque int no tiene el método capitalize().

# AttributeError arising from calling capitalize() on an int value
num = 1445
cap = num.capitalize()
print(cap)

La ejecución de este código da como resultado el mensaje de error que se muestra a continuación:

Screenshot-from-2023-06-08-10-04-12

El mensaje AttributeError del código es el siguiente:

 File "/home/madici/Desktop/helloworld.py", line 3, in <module>
 cap = num.capitalize()
 ^^^^^^^^^^^^^^
AttributeError: 'int' object has no attribute 'capitalize'

Para resolver un AttributeError, asegúrese de que el método o atributo al que llama existe en el tipo de objeto sobre el que lo llama. En este caso, llamar a capitalize() en un tipo de cadena de datos resuelve este error como se muestra a continuación:

Screenshot-from-2023-06-08-10-07-36

ImportError

El ImportError en Python se produce cuando intenta importar un módulo que no se puede encontrar o no es accesible en su entorno actual. Puede ser que aún no esté instalado, que no haya configurado correctamente su ruta o que haya escrito mal el módulo que intenta instalar.

Un ImportError tiene una única subclase hija llamada ModuleNotFoundError que es el error que se lanza cuando se intenta importar un módulo que no se puede encontrar.

Por ejemplo, el código de abajo con intenta importar la biblioteca de análisis de datos pandas arroja un error de este tipo porque el módulo aún no está instalado.

Screenshot-from-2023-06-09-10-46-17

El mensaje ImportError generado se muestra a continuación:

 Archivo "/home/madici/Desktop/helloworld.py", línea 1, en <module>
 import pandas
ModuleNotFoundError: No module named 'pandas

Para solucionar un error de este tipo, asegúrese de que los módulos que intenta importar están instalados. En caso de que eso no resuelva el error, compruebe si está utilizando la grafía correcta para el módulo y la ruta de archivo correcta para acceder al módulo.

ErrorValor

Se trata de una excepción que se produce cuando una función en Python recibe un valor del tipo de datos correcto pero el valor es un valor inapropiado. Por ejemplo, la función Math.sqrt() utilizada para hallar la raíz cuadrada de valores numéricos devolverá un ValueError si se le pasa un número negativo.

Por mucho que el valor sea del tipo correcto, es decir, un valor numérico, el hecho de ser negativo lo convierte en un valor inapropiado para la función

La función int() que convierte un número o una cadena devolverá un ValueError si pasa una cadena que no es un valor numérico de cadena. Pasar "123", o "45" a la función no devuelve ningún error ya que las cadenas pueden convertirse al valor entero apropiado.

Sin embargo, si pasa una cadena que no es un valor de cadena numérico como "Hola" devuelve un ValueError. Esto se debe a que "Hola", aunque es una cadena, es inapropiada ya que no tiene un equivalente entero.

A continuación se muestra un ejemplo de código que genera un ValueError:

# Error de valor resultante de un valor int inapropiado en sqrt()
import math
num = -64
root = math.sqrt(num)
print(root)

# Error de valor resultante de pasar una cadena sin equivalente entero
# a la función int()
numString = "Hola"
num = int(numString)
print(num)

A continuación se muestran los errores del código anterior:

Screenshot-from-2023-06-08-11-21-53

El mensaje de error generado es el siguiente

 File "/home/madici/Desktop/helloworld.py", line 4, in <module>
 root = math.sqrt(num)
 ^^^^^^^^^^^^^^
ValueError: error de dominio matemático

Para corregir el error, utilice los valores adecuados en las funciones como se muestra a continuación:

import math
num = 64
root = math.sqrt(num)
print(root)

numString = "5231"
num = int(numString)
print(num)

IOError

El IOError(Error de entrada/salida) es una excepción que se produce cuando falla una operación de entrada o salida. Esto puede ser causado por intentar acceder a un archivo que no existe, por insuficiente almacenamiento en disco en su dispositivo, por intentar acceder a un archivo para el que no tiene permisos suficientes o cuando intenta acceder a un archivo que está siendo utilizado actualmente por otras operaciones.

Métodos como abrir(), leer(), escribir() y cerrar() que se utilizan normalmente cuando se trabaja con archivos son los que probablemente causen un error de este tipo.

Considere el código siguiente que intenta abrir un archivo llamado "notas.txt" que no existe. El código produce un IOError que eleva el FileNotFoundError:

Screenshot-from-2023-06-09-10-19-58

Con el siguiente mensaje de error:

 File "/home/madici/Desktop/helloworld.py", line 2, in <module>
 file1 = open("notas.txt", "r")
 ^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No existe tal archivo o directorio: 'notas.txt'

Para evitar el error anterior, todo lo que tiene que hacer es asegurarse de que el archivo "notas.txt" existe en el directorio en el que está ejecutando el terminal. Otra forma de manejar los IOErrors es utilizando el bloque probar excepto , como se muestra a continuación:

Screenshot-from-2023-06-09-10-32-52

ErrorNombre

El NameError es una excepción que encontrará cuando intente utilizar una variable, función o módulo que no existe, no está definida en el ámbito actual o no se le ha asignado un valor.

Un error de este tipo suele producirse cuando se escriben mal los nombres de las variables o funciones o las utiliza antes de que estén definidas. Utilizar un módulo sin importarlo también dará lugar a un NameError.

El siguiente código dará lugar a una excepción NameError:

#se produce un error de nombre porque no se ha importado el módulo math
num = 64
root = math.sqrt(64)
print(root)

#se produce un error de nombre porque x se utiliza antes de estar definida
y = 23
print(x)

#se produce un error de nombre porque el nombre de la función no está definido
def greet():
 print("Buenos días")
great() #ameError: el nombre 'great' no está definido

Los siguientes mensajes de error son el resultado del código anterior:

Screenshot-from-2023-06-08-11-56-02

A continuación se muestra un ejemplo de mensaje NameError:

 File "/home/madici/Desktop/helloworld.py", line 3, in <module>
 root = math.sqrt(64)
 ^^^^
NameError: name 'math' is not defined

Para resolver un NameError de este tipo, asegúrese de que no está utilizando módulos antes de importarlos, de que no está utilizando variables o funciones antes de definirlas y de que no está escribiendo mal los nombres de las funciones o variables:

import math
num = 64
root = math.sqrt(64)
print(root)

y = 23
print(y)

def greet():
 print("Buenos días")
greet()

Error de índice

Un IndexError es una excepción que se produce cuando se intenta acceder a un índice de una lista o tupla que está fuera de rango. Considere la siguiente lista:

lista1 = [1, 2, 3, 4, 5]

La lista tiene cinco elementos. Python cuenta los índices a partir de 0(cero). Por lo tanto, la lista anterior tiene índices que van de 0 a n-1, siendo n el número o elementos de la lista. En este caso, el índice o la lista irán de 0 a 4.

Si intenta acceder a un elemento en un índice superior a 4, se encontrará con un IndexError porque el índice está fuera de rango en la lista desde la que intenta acceder a un elemento. El código siguiente genera un IndexError:

list1 = [1, 2, 3, 4, 5]
item = list1<x>[6]</x> #IndexError porque el índice de la lista está fuera de rango
print(item)

El error del código se muestra a continuación:

Screenshot-from-2023-06-09-09-02-43

El mensaje IndexError generado es el siguiente:

 File "/home/madici/Desktop/helloworld.py", line 2, in <module>
 item = list1<x>[</x> 6] #IndexError porque el índice de la lista está fuera de rango
 ~~~~~^^
IndexError: índice de la lista fuera de rango

La mejor forma de evitar un IndexError es utilizar las funciones rango() y len() para asegurarse de que sólo accede a los elementos que están dentro del rango, de esta forma

list1 = [1, 2, 3, 4, 5]

for i in range(len(list1)):
 print(list1[i])

KeyError

Un KeyError es una excepción que se produce cuando se intenta acceder a un elemento de un diccionario utilizando una clave, y la clave no se encuentra en el diccionario. Considere el diccionario siguiente

ciudades = {"Canadá": "Ottawa", "EE.UU.": "Washington", "Italia": "Roma"}

Las claves del diccionario son "Canadá", "EE.UU.", "Italia". Puede acceder a los elementos del diccionario de ciudades utilizando las tres claves. Sin embargo, si intenta acceder a un elemento utilizando una clave que no existe, como "Brasil", se encontrará con un KeyError, como se muestra a continuación:

Screenshot-from-2023-06-09-09-38-06

El mensaje KeyError generado se muestra a continuación:

 File "/home/madici/Desktop/helloworld.py", line 6, in <module>
 print(ciudades["Brasil"])
 ~~~~~~^^^^^^^^^^
KeyError: 'Brasil'

Para resolver un KeyError, asegúrese de que las claves que está utilizando para acceder a los elementos de un diccionario están realmente presentes en el diccionario. Para ello, puede utilizar una sentencia if...else como la siguiente

ciudades = {"Canadá": "Ottawa", "EE.UU.": "Washington", "Italia": "Roma"}

country = "Canada"

if country in cities:
 print("La capital del " país " es " cities[country])
else:
print("La clave " país " no está presente en el diccionario de ciudades")

De esta forma, evitará encontrarse con KeyErrors al acceder a elementos de un diccionario

Conclusión

Cuando codifique en Python, independientemente de su nivel de experiencia, es muy probable que se encuentre con errores. Por lo tanto, asegúrese de familiarizarse con los diferentes tipos de errores destacados en el artículo para asegurarse de que es capaz de manejarlos cuando surjan.

También puede explorar algunos útiles reglas de Python de una sola línea para simplificar tareas comunes.

  • Collins Kariuki
    Autor
    Collins Kariuki es desarrollador de software y escritor técnico para Geekflare. Tiene más de cuatro años de experiencia en el desarrollo de software, una formación en Informática y también ha escrito para Argot, Daily Nation y el periódico Business Daily.
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder