Excepciones con Python

Llamamos excepciones en Python al control de errores mientras estamos ejecutando nuestro programa. Durante la ejecución de nuestro programa, cuando ocurre algún error se crea una excepción y el programa se detiene y muestra el error.

Excepciones Python

Una de las excepciones más comunes es SyntaxError, que se muestra cuando tenemos en nuestro código algo que el intérprete de Python no entiende.

Imagina que tratamos de imprimir en pantalla con un simple print(), pero colocamos al final una letra h sin darnos cuenta. Cuando ejecutamos nuestro programa estaríamos generando una excepción del tipo SyntaxError y nuestro programa se detendría.

print('Mi print genera error'h)

# SyntaxError: invalid syntax. Perhaps you forgot a comma?

Excepciones comunes en Python

En la documentación oficial podemos ver más en detalle todas las excepciones de Python, aunque estas son algunas de las que más suelen aparecer cuando estamos aprendiendo Python:

  • FileNotFoundError: tratamos de acceder a un fichero y el fichero no existe en la ruta que le hemos indicado.
fichero = open('un_archivo.txt', 'r')

# FileNotFoundError: [Errno 2] No such file or directory: 'un_archivo.txt'
  • IndexError: si intentamos acceder a un objeto indexable (listas, tuplas, diccionarios, strings) con un índice que no existe, se muestra este error.
lista = [1, 2, 3, 4]

print(len(lista))
# 4

print(lista[10])
# IndexError: list index out of range
  • KeyError: cuando intentamos acceder en un diccionario al valor asignado a una clave que no existe.
un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988
}
print(un_diccionario['vendidos'])

# KeyError: 'vendidos'
  • ModuleNotFoundError: tratamos de importar un módulo que no existe.
import asfdas

# ModuleNotFoundError: No module named 'asfdas'
numero = 2e300 ** 2
print(numero)

# OverflowError: (34, 'Result too large')
  • SyntaxError: cuando cometemos algún error de sintaxis en nuestro código.
print('Mi print genera error'h)

# SyntaxError: invalid syntax. Perhaps you forgot a comma?
  • TypeError: cuando realizamos algunas operaciones incompatibles con un tipo de datos.
resultado = 5 + '10'

# TypeError: unsupported operand type(s) for +: 'int' and 'str'

Control de excepciones en Python

La estructura de try except en Python nos permite controlar las excepciones para que nuestro programa no se detenga si encuentra alguna. De esta forma, podemos mostrar algún tipo de información al usuario con relación al error que está ocurriendo.

Debemos tener en cuenta que la traducción de try → es intente, except → es excepto.

Veámoslo con algunos ejemplos muy sencillos:

El siguiente programa no genera ningún error. Entra al try para ver si puede ejecutar el código correctamente → ejecuta el bloque de código correctamente y sale por el else → ejecutando el código.

try:
    print('No hay error')
except TypeError:
    print(f'Encontré este error: {TypeError}')
else:
    print('Salimos del try')
finally:
    print('Siempre se ejecuta')

# No hay error
# Salimos del try
# Siempre se ejecuta

Ahora vamos a colocar una línea de código que genere una excepción TypeError dentro del try. El bloque de código no se podrá ejecutar y pasaremos directamente a ejecutar el bloque de código de except.

try:
    print(3 / 'a')
except TypeError:
    print(f'Encontré este error: {TypeError}')
else:
    print('Salimos del try')
finally:
    print('Siempre se ejecuta')

# Encontré este error: <class 'TypeError'>
# Siempre se ejecuta

Veamos otro ejemplo que genere una excepción del tipo OverflowError:

try:
    numero = 2e300 ** 2
except OverflowError:
    print(f'Encontré este error: {OverflowError}')
else:
    print('Salimos del try')
finally:
    print('Siempre se ejecuta')

# Encontré este error: <class 'OverflowError'>
# Siempre se ejecuta

Ahora escribiremos algunas instrucciones para comprobar que nuestro programa, a pesar de encontrar una excepción, sigue funcionando y continúa con las instrucciones siguientes.

try:
    numero = 2e300 ** 2
except OverflowError:
    print(f'Encontré este error: {OverflowError}')
else:
    print('Salimos del try')
finally:
    print('Siempre se ejecuta')

print('el flujo del programa continua...')

# Encontré este error: <class 'OverflowError'>
# Siempre se ejecuta
# el flujo del programa continua...

¿Tenemos que sabernos todas las excepciones para poder controlarlas? La respuesta es que no. Todas las excepciones heredan de la clase Exception, desde la que se pueden controlar todas.

Veamos un ejemplo:

try:
    numero = 2e300 ** 2
except Exception:
    print(f'Encontré algún error de la clase {Exception}')
else:
    print('Salimos del try')
finally:
    print('Siempre se ejecuta')


# Encontré algún error de la clase <class 'Exception'>
# Siempre se ejecuta
# el flujo del programa continua...

Crear excepción con raise

Python nos permite crear excepciones cuando se cumplan determinadas condiciones con raise → (que traducido significa elevar). Puedes ver la documentación oficial de Python sobre raise.

Veamos un pequeño ejemplo en el que creamos una excepción:

En la excepción que vamos a crear, verificaremos que la palabra que introducimos tenga como mínimo una longitud de tres caracteres.

palabra = input('Introduce palabra: ')
if len(palabra) < 3:
  raise Exception("Error, la palabra tiene menos de 3 caracteres")

↓ Introduciendo: aa
# Exception: Error, la palabra tiene menos de 3 caracteres

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *