Captura de errores: try /catch / finally

Correspondencia en Python —>

La captura de errores, va a permitir que si durante la ejecución del programa se prevé que pueda ocurrir algún imprevisto, no se vea detenido el normal funcionamiento del código y se reconvierta el error.

Por ejemplo si el programa espera que se introduzca un determinado tipo de dato, por ejemplo un valor entero, y el usuario facilita un dato literal o numérico decimal, el flujo de ejecución no se debe ver detenido y el programa debe de seguir ejecutándose con normalidad.

Para ello se dispone de la sentencia try/catch/finally.

La primera parte de la sentencia try { } incluye el bloque que va a mantenerse controlado, de tal forma que se si produce un error dentro de este código, el programa ejecutará lo que se haya incluido dentro de catch ( ) { } que va a contener el bloque a ejecutar en caso del error previsto.

Por último finally { } va a contener el bloque que se ejecutará en cualquier caso, se produzca o no el error previsto. Esta último bloque no es necesario que se incluya, pero en ocasiones puede ser útil.

import java.util.InputMismatchException;
import java.util.Scanner;
public class Entrada {
    public static void main(String[] args) {
        boolean numero=false;
        System.out.print("Dime un número y te digo su recíproco: ");


        while (numero==false) {
            try {
                Scanner mi_scanner = new Scanner(System.in);        
                double el_numero=mi_scanner.nextDouble(); 
                double reciproco=1/el_numero;
                System.out.print("El recíproco de  "+el_numero+" es "+reciproco);
                numero=true;
            }
        
            catch (InputMismatchException e){
                System.out.print("Por favor, debe introducir un dato numérico. ");
            } 

            //Si entramos como valor un 0, dará como recíproco Infinity. 

            catch (Exception e){
                System.out.print("Ocurrió un error imprevisto no identificado. ");
            }

            finally {
                System.out.print(" Gracias: ");
            }
        }
    }
}

En este código pedimos que se nos introduzca un número. A continuación se calcula el recíproco de dicho número, que es la unidad dividida entre el número.

Si en lugar de un número se introduce un literal, en el programa se ha previsto el error «InputMismatchException» que se encarga de capturar el error y ejecutar el correspondiente código que se indique.

También se ha previsto que se pueda producir un error genérico «Exception» que captura cualquier tipo de error que se pueda producir. Utilizar este tipo de error genérico, llevará aparejado que si se produce, tengamos que averiguar nosotros mismos qué es lo que ha podido fallar.

Ejemplo de ejecución:

Dime un número y te digo su recíproco: no lo se
Por favor, debe introducir un dato numérico.  Gracias: tres
Por favor, debe introducir un dato numérico.  Gracias: 4
El recíproco de  4.0 es 0.25 Gracias: 

Cuando se ejecuta, nos pide un valor numérico. Si el dato que facilitamos no es numérico, se nos vuelve a pedir un dato numérico y nos da las gracias. Cuando introducimos un dato numérico, se muestra su recíproco y nos da las gracias.

Si no se hubiese utilizado este bloque de captura de errores, el programa se habría detenido mostrando el error producido.

InicioComandos JavaBloques de código.
Comentar códigoSystem.out.printScanner (System.in)
Captura de erroresStringDatos Numéricos
Elementos aleatoriosDatos Fecha/horaConstantes
Bucles forBucles whileBloque if
ArraysArrayListswitch case
HashSetHashMapMétodos.
ClasesArchivosEntorno gráfico Swing
JFrame (Ventanas)Componentes básicos.