Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Manejo de excepciones.
CATEDRATICO:
ALUMNOS:
Ìndice
Excepciones................................................................................................................................ 2
Bibliografía................................................................................................................................. 8
1
2 POO: Manejo de excepciones
Excepciones
La forma "clásica" del control de errores es usar instrucciones "if", que vayan comprobando
cada una de las posibles situaciones que pueden dar lugar a un error, a medida que estas
situaciones llegan. Esto tiende a hacer el programa más difícil de leer, porque la lógica de la
resolución del problema se ve interrumpida por órdenes que no tienen que ver con el problema
en sí, sino con las posibles situaciones de error. Por eso, los lenguajes modernos, como C#,
permiten una alternativa: el manejo de "excepciones".
La idea es la siguiente: "intentaremos" dar una serie de pasos, y al final de todos ellos
indicaremos qué hay que hacer en caso de que alguno no se consiga completar. Esto permite
que el programa sea más legible que la alternativa "convencional".
Como dijimos antes, las cosas pueden salir mal. ¿Pero realmente necesitamos una herramienta
especial para manejar los errores? ¿No podríamos simplemente utilizar la instrucción if? Quizá
todo se solucionaría si empleáramos un código como éste:
MétodoA()
MétodoB()
MétodoC()
se convertiría en:
MétodoA()
if MétodoA tuvo errores
manejar el problema del MétodoA
else
MétodoB()
if MétodoB() tuvo errores
manejar el problema del MétodoB
else
MétodoC()
if MétodoC tuvo errores
manejar el problema del MétodoC
2
3 POO: Manejo de excepciones
Los casos de error (que esperamos no ocurran muy seguido) dominan la lógica, y su
complejidad puede hacer que los programadores se muestren reacios a utilizar este código. De
hecho, las herramientas de C# para manejar excepciones nos permiten apegarnos a la
codificación para el caso normal, y manejar las excepciones en un área separada del programa.
El código que tiene el riesgo de levantar la excepción debe ser colocado en el bloque de try.
Por ejemplo, en nuestro caso colocaremos lo siguiente:
catch (Exception e)
{
// Aqui colocamos el codigo que salva la aplicacion
Console.WriteLine(“No es posible dividir entre cero”);
r = 0;
}
3
4 POO: Manejo de excepciones
Vemos que este bloque tiene un parámetro llamado e. Adentro de este parámetro podemos
encontrar información relacionada con la excepción. Lo que coloquemos en el interior del
bloque depende de la lógica de nuestra aplicación. Si no hubiera excepción el código adentro
del bloque catch no se ejecuta. Tenemos otro bloque llamado finally. Este bloque es opcional.
El código que se coloque en el bloque finally se ejecuta siempre sin importar si la excepción se
llevó a cabo o no. Siempre se ejecuta una vez que try o catch han finalizado de ejecutarse.
Finally puede ser utilizado para limpiar o liberar cualquier recurso que se haya utilizado en try
o catch. En nuestro caso puede utilizarse simplemente para darle al usuario el valor del
resultado.
finally
{
// Mostramos el resultado
Console.WriteLine(“El resultado es {0}”, r);
}
La propiedad Message provee una cadena de texto corta que expone un mensaje de error
descriptivo. En este ejemplo el mensaje de la cadena de texto es:
El método ToString devuelve una cadena con varias líneas. La primer línea es como el mensaje
mencionado anteriormente, y las otras son un rastreo de pila, mismo que empieza en el método
en donde ocurrió la excepción y recorre en sentido inverso los métodos que se invocaron y que
conducen a la excepción. El rastreo termina al encontrar un bloque catch que coincida con la
excepción. Muchas de estas líneas están relacionadas con métodos y bibliotecas del sistema de
C#, pero entre ellos encontrará información relacionada con su código. El elemento clave es el
4
5 POO: Manejo de excepciones
5
6 POO: Manejo de excepciones
Cabe mencionar que si invirtiéramos el orden de los últimos dos bloques “catch” nunca podría
detectarse una excepción FormatException, ya que estaría cubierta por la clase
SystemException.
6
7 POO: Manejo de excepciones
Esto permitirá al invocador del método decidir sobre el curso de acción a tomar. En este caso
optaremos por lanzar una instancia de la clase FormatException. He aquí el código:
A menudo la instrucción throw se ejecuta como resultado de una instrucción if; lo que hace es
crear una nueva instancia de la clase de excepción especificada, e iniciar una búsqueda tratando
de encontrar un bloque catch que coincida. Cuando se crea una nueva excepción es posible
proveer una cadena de mensaje alternativa, misma que el método que atrapó la excepción es
capaz de obtener mediante la propiedad Message.
7
8 POO: Manejo de excepciones
Bibliografía
Bell, D. and Parr, M. (2011). C# para estudiantes. México: Pearson Educación.