Introducción a C - Campus Virtual ORT

Anuncio
Profesor: Pablo Ulman (Polshu)
Manejo de Excepciones (Try / Catch / Finally)
.
Manejo de Excepciones:
Las características de control de excepciones del lenguaje C# proporcionan una manera de afrontar cualquier
situación inesperada o excepcional que se presente mientras se ejecuta un programa.
El control de excepciones utiliza las palabras clave try, catch y finally para intentar realizar acciones que
podrían plantear problemas, controlar errores cuando considere que sea razonable y limpiar los recursos
después.
Pueden generar excepciones el Common Language Runtime (CLR), .NET Framework, las bibliotecas de otros
fabricantes o el código de aplicación. Las excepciones se crean mediante la palabra clave throw.
En muchos casos, puede que una excepción no la produzca un método que el código ha llamado
directamente, sino otro método que aparece más adelante en la pila de llamadas. Cuando esto sucede, CLR
desenredará la pila a fin de buscar un método con un bloque catch para el tipo de excepción específico y
ejecutará el primer bloque catch de este tipo que encuentre. Si no encuentra ningún bloque catch adecuado
en la pila de llamadas, finalizará el proceso y mostrará un mensaje al usuario.
Las excepciones tienen las siguientes propiedades:
 Cuando la aplicación encuentra una circunstancia excepcional, como una división por cero o una
advertencia de que no hay suficiente memoria, se genera una excepción.
 Utilice un bloque try alrededor de las instrucciones que puedan generar excepciones.
 Cuando se produce una excepción dentro del bloque try, el flujo de control salta inmediatamente a un
controlador de excepciones asociado, si existe alguno.
 Si no hay un controlador de excepciones para una excepción determinada, el programa deja de
ejecutarse y presenta un mensaje de error.
 Si un bloque catch define una variable de excepción, puede utilizar dicho bloque para obtener más
información sobre el tipo de excepción que se ha producido.
 Las acciones que pueden producir una excepción se ejecutan con la palabra clave try.
 Un controlador de excepciones es un bloque de código que se ejecuta cuando se produce una
excepción. En C#, la palabra clave catch se utiliza para definir un controlador de excepciones.
 Un programa que utiliza la palabra clave throw puede generar explícitamente excepciones.
 Los objetos de excepción contienen información detallada sobre el error que incluye el estado de la
pila de llamadas y una descripción de texto del error.
 El código se ejecuta en un bloque finally aunque se produzca una excepción, permitiendo así que el
programa libere recursos.
try{
// Bloque de código que puede producir la excepción.
}catch(Exception ex){
// Bloque en el cual se controlan las excepciones
// que ocurren en un bloque try.
}finally{
// Bloque que se ejecuta independientemente de cómo finaliza el bloque try.
}
El bloque try-catch consiste en un bloque try seguido de una o varias cláusulas catch, las cuales especifican los
manejadores de las diferentes excepciones.
La cláusula catch puede ser utilizada sin ningún argumento, esto hará que lo errores sean atrapados pero nunca
podríamos saber el motivo que generó de la excepción.
Por otro lado podemos obtener en el bloque catch un objeto deriva de la clase System.Exception, que será la encargada
de recibir los datos de la excepción.
Por ejemplo:
string strNumero = "diez";
try {
int intNumero = Convert.ToInt32(strNumero);
} catch (Exception ex){
// Bloque catch.
}
// Genero una excepcion
La variable ex contiene información acerca de la excepción que ha ocurrido y mediante la propiedad Message
podríamos obtener la misma.
v 2.0 rev 1.0
1 de 2
Profesor: Pablo Ulman (Polshu)
Manejo de Excepciones (Try / Catch / Finally)
.
Algunos consejos
El código metido entre try, catch se ejecuta muy lento y consume muchos recursos. Así que sólo manejemos
excepciones cuando realmente se necesite. Cuándo es eso?
Las excepciones están construidas para manejar condiciones que no se pueden controlar con la lógica de la
aplicación. Por ejemplo que se corta la conexión con el servidor, que el disco está lleno, o que el hardware
falló, etc.
Antes de lanzar excepciones por todo, fijémonos si realmente es necesario. Evitemos también poner mucho
código en el try; solo afectemos con el try el código que realmente puede fallar.
Por ejemplo:
Correcto
if (conn.State != ConnectionState.Closed){
conn.Close();
}
a:
Erróneo
try {
conn.Close();
} catch (Exception ex) {
// Bloque catch
}
No emita Exception(), pues el framework .net tiene un número de excepciones que nos permite controlar
argumentos y operaciones inválidas, timeouts, conexiones, overflows, etc.
Se debe utilizar esas excepciones que realmente nos indican qué fue lo que sucedió.
Use bloques try/finally. Recuerde que las instrucciones en el Finally siempre se ejecutan independientemente
de si se produjo o no la excepción. Esto es muy útil para liberar recursos, cerrar conexiones, etc.
v 2.0 rev 1.0
2 de 2
Descargar