Excepciones y control de excepciones (Guía de programación de C#)

Actualización: Julio de 2008

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 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.

En este ejemplo, el método hace una prueba para realizar una división por cero y detecta el error. Sin el control de excepciones, este programa finalizaría con un error DivideByZeroException no controlado.

class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new System.DivideByZeroException();
        return x / y;
    }
    static void Main()
    {
        // Input for test purposes. Change values
        // to see exception handling behavior.
        double a = 98, b = 0;
        double result = 0;

        try
        {
            result = SafeDivision(a, b);
            Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine("Attempted divide by zero.");
        }
    }
}

Información general sobre excepciones

Las excepciones tienen las propiedades siguientes:

  • Las excepciones son tipos que se derivan en última instancia de System.Exception.

  • 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 al primer controlador de excepciones asociado que se encuentre en cualquier parte de la pila de llamadas. En C#, la palabra clave catch se utiliza para definir un controlador de excepciones.

  • Si no hay un controlador de excepciones para una excepción determinada, el programa deja de ejecutarse y presenta un mensaje de error.

  • No detecte una excepción a menos que pueda controlarla y dejar la aplicación con un estado conocido. Si detecta una excepción System.Exception, vuelva a producirla mediante la palabra clave throw al final del bloque catch.

  • 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.

  • 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, tal como el estado de la pila de llamadas y una descripción de texto del error.

  • El código de un bloque finally se ejecuta aunque se produzca una excepción. Use un bloque finally para liberar recursos, por ejemplo, para cerrar las secuencias o archivos que se abrieron en el bloque try.

  • Las excepciones administradas de .NET Framework se implementan sobre el mecanismo de control de excepciones estructurado de Win32. Para obtener más información, vea Structured Exception Handling (C++) y A Crash Course on the Depths of Win32 Structured Exception Handling.

Secciones relacionadas

Consulte los temas siguientes para obtener más información sobre las excepciones y el control de excepciones:

Especificación del lenguaje C#

Para obtener más información, vea las secciones siguientes de Especificación del lenguaje C#.

  • 8.9.5 La instrucción throw

  • 8.10 La instrucción try

  • 16 Excepciones

Vea también

Conceptos

Guía de programación de C#

Información general sobre excepciones

Referencia

Palabras clave de C#

throw (Referencia de C#)

try-catch (Referencia de C#)

try-finally (Referencia de C#)

try-catch-finally (Referencia de C#)

Otros recursos

Instrucciones de diseño de excepciones

Controlar y generar excepciones

Escritura segura de código .NET

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Se ha modificado un ejemplo de código y se ha agregado texto sobre cómo desenredar la pila.

Corrección de errores de contenido.

Julio de 2008

Se ha agregado un ejemplo a la explicación del bloque finally.

Mejora de la información.

Julio de 2008

Se ha agregado información sobre el mecanismo de control de excepciones estructurado de Win32.

Mejora de la información.