Sentencia try … catch

 Las excepciones son un mecanismo de C++ para capturar errores que se producen en tiempo de ejecución. Un programa puede estar bien hecho pero por causas externas pueden producirse errores. Mediante este sistema hacemos que el código sea mucho más robusto.

Por ejemplo, el método at de la plantilla vector de la biblioteca C++ que veremos más adelante proporciona verificación de índices fuera de rango; esto es, la expresión v.at(i) permite acceder al elemento i del vector v y lanzará una excepción out_of_range siempre que i esté fuera del rango del vector (las excepciones están declaradas en el fichero de cabecera <stdexcept>).

Para capturar excepciones debemos crear un bloque try-catch que englobe algún momento problemático o critico del programa, la sintaxis es:

catch1

Si dentro de una función detectamos un error lanzamos una excepción poniendo la palabra throw y un parámetro de un tipo determinado, es como si ejecutáramos un return de un objeto (una cadena, un entero o una clase definida por nosotros). Esta función deberá encerrar el código que puede lanzar excepciones en un bloque try y atraparlas en un bloque catch para manejarlas. Cuando finaliza el bloque catch, la excepción se considera manejada y la ejecución continúa. Continuaremos más adelante con las excepciones.

Por ejemplo:

throw_1

si la función f() fue invocada desde g() y esta a su vez desde h() el error se irá pasando entre ellas hasta que se recoja.

Para recoger un error empleamos la pseudo función catch , esta instrucción se pone como si fuera una función, con catch y un parámetro de un tipo determinado entre paréntesis, después abrimos llave, escribimos el código de gestión del error y cerramos la llave:

catch

Podemos poner varios bloques catch seguidos, cada uno recogerá un error de un tipo distinto. El orden de los bloques es el orden en el que se recogen las excepciones:

catch2

Si queremos que un catch trate más de un tipo de errores, podemos poner tres puntos (parámetros indefinidos):

catch3

El tratamiento de errores visto hasta ahora es muy limitado, ya que no tenemos forma de especificar donde se pueden producir errores (en que bloques del programa). La forma de especificar donde se pueden producir errores que queremos recoger es emplear bloques try , que son bloques delimitados poniendo la palabra try y luego poniendo entre llaves el código que queremos probar. Después del bloque try se ponen los bloques catch para tratar los errores que se hayan podido producir:

try1

En realidad sólo podemos recoger errores después de un bloque try , por lo que los catch siempre van asociados a los try . Si una función que no está dentro de un bloque de prueba recibe un error la pasa a su nivel superior hasta que llegue a una llamada producida dentro de un bloque de prueba que trate el error o salga del programa principal. Si en un bloque try se produce un error que no es tratado por sus catch , también pasamos el error hacia arriba.

Cuando se recoge un error con un catch no se retorna al sitio que lo origino, sino que se sigue con el código que hay después del último catch asociado al try donde se acepto el error. En el ejemplo se ejecutaría la función z().

atras2

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.