Saltar a contenido

Manejo silencioso de errores

Veamos otro punto de vista sobre como manejar errores. Hasta ahora, hemos estado manejando errores de manera bastante directa. Hemos detectado un error y hemos emitido un mensaje al usuario.

Pero, ¿qué sucede si no queremos hacer eso? ¿Qué sucede si queremos manejar un error, pero no queremos hacer nada con él? ¿Es posible tener un manejo silencioso de errores?

¡Por supuesto que sí!

Ignorar errores

Volvamos a nuestro programa que solicita al usuario un número entero y luego intenta convertirlo a un número entero.

Asumo que has hecho la tira de ejercitación aplicada donde debías refactorizar nuestro programa para convertirlo en un programa funcional. Si no lo has hecho, te invito a que lo hagas. ¡Es un buen ejercicio y lo vas a precisar para continuar con nuestro tema aquí!

Ahora bien, si el usuario ingresa un valor que no puede ser convertido a un número entero, el programa maneja el error y emite un mensaje al usuario. Y esto ocurre una, dos, tres... muchas veces, hasta que el usuario ingresa un número entero:

Python
# Define la función main()
def main():
    # Solicita al usuario un número entero y lo almacena en la variable numero
    numero = obtener_numero_entero()
    print(f"El número ingresado es: {numero}")

# Define la función obtener_numero_entero()
def obtener_numero_entero():
    while True:
        try:
            return int(input("Ingrese un número entero: "))
        except ValueError:
            print("¡Ups! El valor ingresado no es un número entero.")

# Llama a la función main()
main()

En este programa, cada vez que el usuario ingrese un valor que no pueda ser convertido a un número entero, el programa manejará el error y emitirá un mensaje al usuario:

Terminal (Entrada/Salida)
Ingrese un número entero: hola
¡Ups! El valor ingresado no es un número entero.
Ingrese un número entero: chau
¡Ups! El valor ingresado no es un número entero.
Ingrese un número entero: cuarenta
¡Ups! El valor ingresado no es un número entero.

Si no quisiéramos emitir un mensaje al usuario cada vez que se produzca un error, podríamos simplemente ignorar el manejo del error.

¿Cómo podríamos hacer esto?

Ignorar errores con pass

Supongamos que sí quieres manejar una excepción en Python. Quieres capturar el error y disparar (trigger) la excepción correspondiente. Pero no quieres hacer nada con ella. Es decir, quieres ignorarla en silencio. Que el programa no detenga su ejecución pero que tampoco haga nada en consecuencia al error producido.

Es como si estuvieras jugando con otras personas y cuando llega tu turno decides no hacer nada, decir simplemente: "paso".

Para ignorar el manejo de un error, simplemente debemos incluir la palabra clave pass en el bloque except, y nada más.

Veamos cómo quedaría nuestro programa si ignoramos el manejo de errores:

Python
# Define la función main()
def main():
    # Solicita al usuario un número entero y lo almacena en la variable numero
    numero = obtener_numero_entero()
    print(f"El número ingresado es: {numero}")

# Define la función obtener_numero_entero()
def obtener_numero_entero():
    while True:
        try:
            return int(input("Ingrese un número entero: "))
        except ValueError:
            pass # En lugar de: print("¡Ups! El valor ingresado no es un número entero.")

# Llama a la función main()
main()

Ahora, cada vez que el usuario equivoque su dato ingresado, nuestro programa solo ignorará el error y continuará solicitando al usuario un número entero:

Terminal (Entrada/Salida)
Ingrese un número entero: hola
Ingrese un número entero: chau
Ingrese un número entero: cuarenta
Ingrese un número entero: 10
El número ingresado es: 10

¡Y listo! Hemos logrado un manejo silencioso de errores.

¡Buena práctica!

Ignorar errores no es una buena práctica de programación. No es recomendable. Tal vez sería útil explicarle al usuario por qué se le solicita una y otra vez un mismo dato. No siempre le va a ser obvio el error.

Así que siempre es mejor manejar los errores de manera adecuada.

Sin embargo, en algunos casos, puede ser útil ignorar errores. Por ejemplo, cuando se está desarrollando un prototipo o una prueba de concepto.

Pero en un programa real, siempre es mejor manejar los errores de manera adecuada.