Curso C# con Mono – Tratamiento de excepciones
Una característica común a este tipo de lenguajes de alto nivel, es la presencia del manejo de excepciones.
¿Qué es una excepción?
Una excepción es una situación anormal que se da a lo largo de la ejecución del programa. El manejador de la excepción, es una estructura de control que permite ejecutar un código de acuerdo a esa situación anormal de forma controlada.
¿Qué tipo de acciones se suelen realizar?
Por un lado tenemos acciones de tipo terminación. En lugar de aparecer un mensaje de error del sistema operativo, el programa mismo lo emite informando de qué va a terminar su ejecución.
Por otro lado, tenemos manejadores que modifican el comportamiento del programa en cierto momento. Para este tipo de acciones, podríamos decir que las excepciones representan más una forma de control del flujo que un recurso de emergencia.
¿Qué otros mecanismos existen para esta misma problemática?
Ejemplos típicos de excepciones son:
- Cuando tratamos de dividir entre cero
- Cuando tratamos de llamar a un método de una instancia que es nula
- Cuando tratamos de convertir una cadena en número y la cadena no tiene formato numérico
Y así podríamos seguir un largo etcétera de posibles excepciones. Como comprobaréis todas estas excepciones, podrían comprobarse como se hace en lenguajes que no tienen este mecanismo: mediante condicionales cada vez que hay una operación que pueda sufrir error. ¿Por qué es mejor usar excepciones?
Ventajas de las excepciones
¿Para qué complicarnos la vida con un nuevo concepto si podemos usar directamente comprobaciones?
- Separar el código principal del programa, del tratamiento de errores
- Propagar el error en la pila de ejecución, de forma
- Agrupar y clasificar los errores
¿Cómo detectar y tratar una excepción con Mono y C#?
Para detectar una excepción en C# usamos la siguiente estructura (veámoslo con un ejemplo):
int a = 1; int b = 0; try{ int c = a / b; // zona protegida }catch(DivideByZeroException exc){ Console.Write("Ha intentado dividir desde cero"); // código a ejecutar }
Como véis, estamos hablando directamente de la excepción de división entre cero. Si queremos controlar cualquier tipo de excepción, sólo tendremos que usar en lugar de DivideByZeroException, la clase de excepciones de la que heredan todas las demás, Exception. También podremos combinarlas, de forma que podamos atender a cierto tipo de excepciones y a cualquier otra que no hayamos controlado.
Veamos un caso de control para un tipo de excepción concreta (la de formato incorrecto) y el control para cualquier otro caso:
string cadena = "2a"; try{ int valor = int.Parse(cadena); }catch(FormatException exc){ Console.Write("Ha ocurrido una excepción por el formato del fichero. Detalles:\n" + exc.Message); }catch(Exception exc){ Console.Write("Ha ocurrido otro tipo de error. Detalles:\n" + exc.Message); }
Entregas anteriores
- Curso C# con Mono – Conversión de tipos e información cultural
- Curso C# con Mono – Declaración de clases y estructuras
- Curso C# con Mono – Espacio de nombres y regiones
- Curso C# con Mono – Ensamblados
- Curso C# con Mono – Variables y constantes
- Curso C# con Mono – Tipos de datos y uso de referencias
- Curso C# con Mono – ¡Hola Mundo!