Excepciones y control de excepciones (Guía de programación de C#)Exceptions and Exception Handling (C# Programming Guide)

Las características de control de excepciones del lenguaje C# le ayudan a afrontar cualquier situación inesperada o excepcional que se produce cuando se ejecuta un programa.The C# language's exception handling features help you deal with any unexpected or exceptional situations that occur when a program is running. El control de excepciones usa las palabras clave try, catch y finally para intentar realizar acciones que pueden no completarse correctamente, para controlar errores cuando decide que es razonable hacerlo y para limpiar recursos más adelante.Exception handling uses the try, catch, and finally keywords to try actions that may not succeed, to handle failures when you decide that it is reasonable to do so, and to clean up resources afterward. Las excepciones las puede generar Common Language Runtime (CLR), .NET Framework, cualquier biblioteca de terceros o el código de aplicación.Exceptions can be generated by the common language runtime (CLR), by the .NET Framework or any third-party libraries, or by application code. Las excepciones se crean mediante el uso de la palabra clave throw.Exceptions are created by using the throw keyword.

En muchos casos, una excepción la puede no producir un método al que el código ha llamado directamente, sino otro método más bajo en la pila de llamadas.In many cases, an exception may be thrown not by a method that your code has called directly, but by another method further down in the call stack. Cuando esto sucede, CLR desenredar la pila, busca un método con un bloque catch para el tipo de excepción específico y ejecuta el primer bloque catch que encuentra.When this happens, the CLR will unwind the stack, looking for a method with a catch block for the specific exception type, and it will execute the first such catch block that if finds. Si no encuentra ningún bloque catch adecuado en cualquier parte de la pila de llamadas, finalizará el proceso y mostrará un mensaje al usuario.If it finds no appropriate catch block anywhere in the call stack, it will terminate the process and display a message to the user.

En este ejemplo, un método prueba a hacer la división entre cero y detecta el error.In this example, a method tests for division by zero and catches the error. Sin el control de excepciones, este programa finalizaría con un error DivideByZeroException no controlada.Without the exception handling, this program would terminate with a DivideByZeroException was unhandled error.

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 the 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 excepcionesExceptions Overview

Las excepciones tienen las siguientes propiedades:Exceptions have the following properties:

  • Las excepciones son tipos que derivan en última instancia de System.Exception.Exceptions are types that all ultimately derive from System.Exception.

  • Use un bloque try alrededor de las instrucciones que pueden producir excepciones.Use a try block around the statements that might throw exceptions.

  • Una vez que se produce una excepción en el bloque try, el flujo de control salta al primer controlador de excepciones asociado que está presente en cualquier parte de la pila de llamadas.Once an exception occurs in the try block, the flow of control jumps to the first associated exception handler that is present anywhere in the call stack. En C#, la palabra clave catch se utiliza para definir un controlador de excepciones.In C#, the catch keyword is used to define an exception handler.

  • Si no hay ningún controlador de excepciones para una excepción determinada, el programa deja de ejecutarse con un mensaje de error.If no exception handler for a given exception is present, the program stops executing with an error message.

  • No detecte una excepción a menos que pueda controlarla y dejar la aplicación en un estado conocido.Do not catch an exception unless you can handle it and leave the application in a known state. Si se detecta System.Exception, reinícielo con la palabra clave throw al final del bloque catch.If you catch System.Exception, rethrow it using the throw keyword at the end of the catch block.

  • Si un bloque catch define una variable de excepción, puede utilizarla para obtener más información sobre el tipo de excepción que se ha producido.If a catch block defines an exception variable, you can use it to obtain more information about the type of exception that occurred.

  • Las excepciones puede generarlas explícitamente un programa con la palabra clave throw.Exceptions can be explicitly generated by a program by using the throw keyword.

  • Los objetos de excepción contienen información detallada sobre el error, como el estado de la pila de llamadas y una descripción de texto del error.Exception objects contain detailed information about the error, such as the state of the call stack and a text description of the error.

  • El código de un bloque finally se ejecuta incluso si se produce una excepción.Code in a finally block is executed even if an exception is thrown. Use un bloque finally para liberar recursos, por ejemplo, para cerrar las secuencias o los archivos que se abrieron en el bloque try.Use a finally block to release resources, for example to close any streams or files that were opened in the try block.

  • Las excepciones administradas de .NET Framework se implementan en el mecanismo de control de excepciones estructurado de Win32.Managed exceptions in the .NET Framework are implemented on top of the Win32 structured exception handling mechanism. Para más información, vea Control de excepciones estructurado (C/C++) y A Crash Course on the Depths of Win32 Structured Exception Handling (Curso intensivo sobre los aspectos específicos del control de excepciones estructurado de Win32).For more information, see Structured Exception Handling (C/C++) and A Crash Course on the Depths of Win32 Structured Exception Handling.

Vea los temas siguientes para obtener más información sobre excepciones y control de excepciones:See the following topics for more information about exceptions and exception handling:

Especificación del lenguaje C#C# Language Specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee Also