Compartir a través de


Excepciones y control de excepciones

Las características de control de excepciones del lenguaje C# le ayudan a tratar cualquier situación inesperada o excepcional que se produzca cuando se ejecuta un programa. El control de excepciones usa las trypalabras clave , catchy finally para probar las acciones que pueden no realizarse correctamente, para controlar los errores cuando decida que es razonable hacerlo y limpiar los recursos después. Las excepciones pueden ser generadas por el Common Language Runtime (CLR), por bibliotecas de .NET o de terceros, o por el código de la aplicación. Las excepciones se crean mediante la throw palabra clave .

En muchos casos, se puede producir una excepción no mediante un método al que el código ha llamado directamente, sino por otro método más abajo en la pila de llamadas. Cuando se produce una excepción, CLR desenredará la pila, buscará un método con un catch bloque para el tipo de excepción específico y ejecutará el primer catch bloque que encuentra. Si no encuentra ningún bloque adecuado catch en ninguna parte de la pila de llamadas, finalizará el proceso y mostrará un mensaje al usuario.

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

public class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new DivideByZeroException();
        return x / y;
    }

    public static void Main()
    {
        // Input for test purposes. Change the values to see
        // exception handling behavior.
        double a = 98, b = 0;
        double result;

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

Información general sobre excepciones

Las excepciones tienen las siguientes propiedades:

  • Las excepciones son tipos que, en última instancia, derivan de System.Exception.
  • Use un try bloque alrededor de las instrucciones que podrían producir excepciones.
  • Una vez que se produce una excepción en el try bloque, el flujo de control salta al primer controlador de excepciones asociado que está presente en cualquier parte de la pila de llamadas. En C#, la catch palabra clave se usa para definir un controlador de excepciones.
  • Si no hay ningún controlador de excepciones para una excepción determinada, el programa deja de ejecutarse con un mensaje de error.
  • No detecte una excepción a menos que pueda controlarla y dejar la aplicación en un estado conocido. Si detecta System.Exception, vuelva a lanzarlo usando la palabra clave throw al final del bloque catch.
  • Si un catch bloque define una variable de excepción, puede usarla para obtener más información sobre el tipo de excepción que se produjo.
  • Las excepciones se pueden generar explícitamente mediante un programa mediante la throw palabra clave .
  • Los objetos exception contienen información detallada sobre el error, como el estado de la pila de llamadas y una descripción de texto del error.
  • El código de un finally bloque se ejecuta independientemente de si se produce una excepción. Use un finally bloque para liberar recursos, por ejemplo, para cerrar las secuencias o archivos que se abrieron en el try bloque.
  • Las excepciones administradas en .NET se implementan sobre el mecanismo de control de excepciones estructurado de Win32. Para obtener más información, consulte Control estructurado de excepciones (C/C++) y Un curso intensivo en las profundidades del control de excepciones estructurado de Win32.

Especificación del lenguaje C#

Para obtener más información, vea Excepciones en la especificación del lenguaje C#. La especificación del lenguaje es el origen definitivo de la sintaxis y el uso de C#.

Consulte también