Cargando...

Manejo de excepciones en C# (try, catch, finally)

Aprende a manejar excepciones en C# usando bloques try, catch y finally para gestionar errores de forma segura con ejemplos.

En C#, el manejo de errores permite capturar y controlar situaciones inesperadas durante la ejecución del programa. Así se evita que el programa se bloquee de forma abrupta y se pueden mostrar mensajes adecuados o tomar acciones alternativas. El manejo de errores utiliza los bloques try, catch y finally.


Uso de try-catch

El bloque try contiene código que puede generar una excepción. Si ocurre un error, el bloque catch lo gestiona.


try
{
    int numero = int.Parse("abc"); // Conversión inválida
    Console.WriteLine("Número: " + numero);
}
catch (FormatException ex)
{
    Console.WriteLine("Error: formato de número inválido.");
}
// Salida:
Error: formato de número inválido.

Múltiples bloques catch

Se pueden usar múltiples catch para diferentes tipos de error. Así cada excepción puede manejarse de manera específica.


try
{
    int[] numeros = { 1, 2, 3 };
    Console.WriteLine(numeros[5]); // Índice fuera de rango
}
catch (IndexOutOfRangeException)
{
    Console.WriteLine("Error: índice de arreglo fuera de rango.");
}
catch (Exception ex)
{
    Console.WriteLine("Error inesperado: " + ex.Message);
}

Bloque finally

El bloque finally siempre se ejecuta, ocurra o no un error. Normalmente se usa para cerrar archivos o liberar conexiones a bases de datos.


try
{
    Console.WriteLine("Abriendo archivo...");
    throw new Exception("¡Archivo no encontrado!");
}
catch (Exception ex)
{
    Console.WriteLine("Error: " + ex.Message);
}
finally
{
    Console.WriteLine("Cerrando archivo...");
}
// Salida:
Abriendo archivo...
Error: ¡Archivo no encontrado!
Cerrando archivo...

Lanzar excepciones personalizadas

Puede definir condiciones de error propias y lanzar excepciones con throw.


static void Dividir(int a, int b)
{
    if (b == 0)
        throw new DivideByZeroException("Error: ¡División por cero!");
    Console.WriteLine("Resultado: " + (a / b));
}

static void Main()
{
    try
    {
        Dividir(10, 0);
    }
    catch (DivideByZeroException ex)
    {
        Console.WriteLine("Error: " + ex.Message);
    }
}
// Salida:
Error: ¡División por cero!

Resumen

  • try: Bloque con código que puede generar una excepción.
  • catch: Captura y gestiona el error.
  • finally: Siempre se ejecuta, normalmente para liberar recursos.
  • throw: Permite lanzar excepciones personalizadas.
  • Múltiples catch permiten manejar diferentes tipos de error.