En Python, los errores son eventos que ocurren durante la ejecución de un programa que impiden que el programa se ejecute correctamente. Hay varios tipos de errores en Python, como errores de sintaxis, errores de nombre, errores de tipo, etc.
Para capturar errores en Python, se puede utilizar un bloque try-except. El bloque try contiene el código que se quiere ejecutar y el bloque except contiene el código que se ejecutará en caso de que se produzca una excepción.
Captura de errores
Los errores en Python se capturan usando bloques «try-except». El código se ejecuta en el bloque «try» y si se produce un error, se captura y maneja en el bloque «except».
La sintaxis de las excepciones
try:
# el código donde podría producirse un error
except:
# Que hacemos cuando se produce una excepción
else:
# esto se ejecuta si no se ha producido ninguna excepción
finally:
# esta parte se ejecuta siempre
Como ejemplo, voy a crear una función, siendo consciente que esto de las funciones lo veremos en la siguiente Pyldora Pythonica. En concreto se trata de esta función,
def convert(cadena):
try:
entero = int(cadena)
except ValueError as error:
print(error)
entero = int(float(cadena))
else:
print(f"El valor de '{cadena}' es '{entero}'")
finally:
print("Esto se ejecuta con independencia de si se produce un error")
El bloque else
El bloque «else» en un bloque «try-except» se ejecuta si no se produce ninguna excepción en el bloque «try». Por lo general, se utiliza para incluir código que se debe ejecutar si el código en el bloque «try» se ejecuta correctamente.
Si el código en el bloque «try» no se ejecuta correctamente y se produce una excepción, el control salta al bloque «except» correspondiente que captura la excepción. Si no hay un bloque «except» que maneje la excepción, la excepción no se capturará y el programa terminará con un error.
El bloque finally
Puedes usar un bloque «finally» para asegurarte de que se ejecute código independientemente de si se produce una excepción o no. El código en el bloque «finally» se ejecutará siempre, incluso si se produce una excepción o si el código en el bloque «try» se ejecuta correctamente. Por ejemplo:
try:
# código que se intenta ejecutar
except Exception as e:
# código que maneja la excepción
finally:
# código que se ejecuta siempre
Un ejemplo con try-except, sería el siguiente,
try:
result = 10 / 0
except ZeroDivisionError:
print("División por cero!")
finally:
print("Este código se ejecutará siempre.")
En este ejemplo, se intenta dividir 10 entre 0 en el bloque «try», lo que produce una excepción de división por cero. El bloque «except» captura la excepción y muestra un mensaje de error. Finalmente, el bloque «finally» se ejecuta para mostrar un mensaje de confirmación de que el código se ejecutó correctamente.
Si además quisieramos utilizar el else, podríamos hacerlo como se muestra a continuación,
try:
result = 10 / 5
except ZeroDivisionError:
print("División por cero!")
else:
print("Resultado:", result)
finally:
print("Este código se ejecutará siempre.")
En este ejemplo, se divide 10 entre 5 en el bloque «try», lo que no produce ninguna excepción. El bloque «else» se ejecuta y muestra el resultado de la operación matemática. Finalmente, el bloque «finally» se ejecuta para mostrar un mensaje de confirmación de que el código se ejecutó correctamente.
Uso con bucles
Los bucles también pueden utilizarse con los bloques «try-except» para ejecutar repetidamente código que puede producir excepciones. Por ejemplo:
while True:
try:
x = int(input("Ingrese un número: "))
break
except ValueError:
print("Oops! No es un número válido. Intente nuevamente...")
En este ejemplo, se utiliza un bucle while
para solicitar repetidamente al usuario que ingrese un número. Si el usuario ingresa un valor no numérico, se produce una excepción ValueError
, que se captura en el bloque except
y se muestra un mensaje de error. El bucle continúa hasta que el usuario ingresa un número válido.
O, en el caso de un ejemplo con un bucle for
, lo puedes hacer de la siguiente forma,
numbers = [1, 2, 3, 4, 5, 'six']
for number in numbers:
try:
result = 10 / int(number)
print(result)
except ValueError:
print("Oops! No es un número válido.")
except ZeroDivisionError:
print("Oops! No se puede dividir por cero.")
En este ejemplo, el bucle for
itera sobre una lista de números y otros valores. Si se intenta convertir un valor a int
y falla (por ejemplo, si el valor es una cadena que no puede ser convertida a un número), se produce una excepción ValueError
, que se captura en el bloque except
y se muestra un mensaje de error. Si se intenta dividir por un número igual a cero, se produce una excepción ZeroDivisionError
, que también se captura en el bloque except
y se muestra un mensaje de error.