Repreguntar al usuario cuando un error sucede
Nos quedamos con el último programa:
Y con un interrogante:
¿Cómo podríamos hacer para que el programa finalice su ejecución de manera exitosa, a pesar de que el usuario se equivoque en el ingreso del número?
Bucles infinitos, repreguntas y break
¡Por supuesto! La solución a este problema es muy sencilla: simplemente debemos incluir un bucle que repregunte al usuario por un número entero hasta que este ingrese un valor válido.
En este caso, podríamos utilizar un bucle while
para solicitar al usuario un número entero y, si el usuario se equivoca, volver a solicitarle el ingreso del número. Ya habíamos hecho esto antes, pero sin tener en cuenta el manejo de errores. Ahora, con el manejo de errores, podemos hacerlo de manera más eficiente. Veamos cómo:
En este caso, el bucle
while
se ejecutará indefinidamente hasta que el usuario ingrese un número entero.Si el usuario se equivoca, el programa manejará el error ejecutando el bloque
except
y volverá a solicitarle el ingreso del número, una y otra vez, las veces que sea necesario mientras que el usuario no ingrese un número entero.Pero, una vez que el usuario ingrese un número entero, el bucle
while
se romperá con el comandobreak
dentro de la estructuraelse
y el programa imprimirá el número ingresado.
Veamos la ejecución del programa con un valor numérico:
Y ahora, con un valor no numérico:
Ingrese un número entero: hola
¡Ups! El valor ingresado no es un número entero.
Ingrese un número entero: 10
El número ingresado es: 10
¡Problema resuelto!
Ahora nuestro programa funciona correctamente, y todo gracias al bucle while
y a la palabra clave break
.
¡Para recordar!
Puedes usar break
dentro de bucles para salir de ellos.
También puedes usarlo dentro de una estructura condicional, como if
, elif
o else
.
Y por supuesto que puedes usarlo en una declaración try… except… else…
.
Siempre que estés en un bucle del que quieras salir, puedes usar la palabra clave break
en la línea de código que lo precises.
Otro enfoque, mismo resultado
Con lo expresado anteriormente, nuestro programa también podría haber sido así:
En este caso, el bucle
while
se ejecutará indefinidamente hasta que el usuario ingrese un número entero.Si el usuario se equivoca, el programa manejará el error ejecutando el bloque
except
y volverá a solicitarle el ingreso del número, una y otra vez, las veces que sea necesario mientras que el usuario no ingrese un número entero.Pero, una vez que el usuario ingrese un número entero, el bucle
while
se romperá con el comandobreak
dentro de la estructuratry
, puesto que no se sucederá ningún error, y el programa imprimirá el número ingresado.
Ambos programas son equivalentes y funcionan de la misma manera. La elección de uno u otro diseño dependerá de tus preferencias personales y de tu estilo de programación.
¡Pero ambos son correctos por lo que no tenemos una opinión sobre cuál es mejor o cuál debieras usar!
Antes de seguir con el tema de excepciones, te invito a que realices los primeros ejercicios de la ejercitación aplicada a este tema. ¡Vamos a practicar! Haz clic aquí para comenzar.
Luego de realizar los ejercicios, podrás continuar con el siguiente tema.