AYUDA .NET

Try/Catch en C# (Cómo funciona para desarrolladores)

Actualizado 16 de mayo, 2023
Compartir:

Si eres nuevo en la programación en C#, es posible que hayas oído hablar bastante de la sentencia "try catch". En este tutorial, nos adentraremos en el mundo del manejo de excepciones, centrándonos en los bloques catch, y exploraremos cómo puedes utilizar las sentencias try y catch para hacer que tu código sea más resistente a los errores. A lo largo del proceso, le ofreceremos numerosos ejemplos de la vida real que le ayudarán a afianzar sus conocimientos.

¿Qué son las excepciones y por qué hay que gestionarlas?

En C#, una excepción representa una ocurrencia que tiene lugar mientras se ejecuta un programa, que interfiere con la progresión estándar del programa en la ejecución de instrucciones. Cuando se produce una excepción, el flujo del programa se desvía, y si la excepción no se maneja, el programa terminará abruptamente.

El manejo de excepciones es una forma de anticipar y gestionar estos eventos perturbadores, permitiendo que su programa se recupere de problemas inesperados y continúe ejecutándose según lo previsto. Mediante el uso de bloques try y catch, puede asegurarse de que su código maneja los errores con elegancia y proporciona a los usuarios información significativa.

El bloque de prueba

Un bloque try es un segmento de código que se espera que pueda generar excepciones. Cuando envuelves tu código en un bloque try, le estás diciendo al compilador que quieres manejar las excepciones potenciales que puedan surgir dentro de ese bloque.

He aquí un ejemplo básico de cómo utilizar un bloque try:


    try
    {
        //  Código que puede generar una excepción
    }
    catch (Exception ex)
    {
        //  gestionar la excepción
    }

    try
    {
        //  Código que puede generar una excepción
    }
    catch (Exception ex)
    {
        //  gestionar la excepción
    }
Try
		'  Código que puede generar una excepción
	Catch ex As Exception
		'  gestionar la excepción
	End Try
VB   C#

Bloque de captura Captura de excepciones

La sentencia catch se utiliza junto con un bloque try para manejar excepciones. Cuando se produce una excepción dentro de un bloque try, la ejecución del programa salta al bloque catch correspondiente, donde se puede especificar qué debe hacer el programa en respuesta a la excepción.

Para capturar una excepción, es necesario crear un bloque catch inmediatamente después del bloque try. Un bloque catch suele incluir un parámetro que representa la excepción capturada.

He aquí un ejemplo de declaración catch en acción:


    try
    {
        int result = 10/0;
    }
    catch (DivideByZeroException ex)
    {
        Console.WriteLine("An error occurred: " + ex.Message);
    }

    try
    {
        int result = 10/0;
    }
    catch (DivideByZeroException ex)
    {
        Console.WriteLine("An error occurred: " + ex.Message);
    }
Try
		Dim result As Integer = 10\0
	Catch ex As DivideByZeroException
		Console.WriteLine("An error occurred: " & ex.Message)
	End Try
VB   C#

En este ejemplo, el código dentro del bloque try intenta dividir por cero, lo que generará una DivideByZeroException. A continuación, el bloque catch gestiona la excepción y muestra un mensaje al usuario.

Múltiples Bloques Catch manejando diferentes excepciones

A veces, tu bloque try puede generar diferentes tipos de posibles excepciones. En tales casos, puede utilizar varios bloques catch para manejar cada tipo de excepción por separado.

El siguiente ejemplo demuestra el uso de múltiples bloques catch:


    try
    {
        int [] numbers = new int [7];
        numbers [12] = 70;
    }
    catch (IndexOutOfRangeException ex)
    {
        Console.WriteLine("An index out of range error occurred: " + ex.Message);
    }
    catch (Exception e)
    {
        Console.WriteLine("An unexpected error occurred: " + e.Message);
    }

    try
    {
        int [] numbers = new int [7];
        numbers [12] = 70;
    }
    catch (IndexOutOfRangeException ex)
    {
        Console.WriteLine("An index out of range error occurred: " + ex.Message);
    }
    catch (Exception e)
    {
        Console.WriteLine("An unexpected error occurred: " + e.Message);
    }
Try
		Dim numbers(6) As Integer
		numbers (12) = 70
	Catch ex As IndexOutOfRangeException
		Console.WriteLine("An index out of range error occurred: " & ex.Message)
	Catch e As Exception
		Console.WriteLine("An unexpected error occurred: " & e.Message)
	End Try
VB   C#

En este ejemplo, el código dentro del bloque try intenta asignar un valor a un índice de array que no existe, generando una IndexOutOfRangeException. El primer bloque catch gestiona esta excepción específica, mientras que el segundo bloque catch captura cualquier otra excepción que pueda producirse.

Recuerde, cuando utilice varios bloques catch, ordénelos siempre del tipo de excepción más específico al más general.

Filtros de excepciones Añadir condiciones a los bloques Catch

Los filtros de excepciones permiten añadir condiciones a los bloques catch, lo que permite capturar excepciones sólo si se cumple una determinada condición. Para utilizar un filtro de excepciones, añada la palabra clave when seguida de una condición en su sentencia catch.

El siguiente ejemplo demuestra el uso de filtros de excepción:


    try
    {
        int result = 10 / 0;
    }
    catch (DivideByZeroException ex) when (ex.Message.Contains("divide"))
    {
        Console.WriteLine("An error occurred: " + ex.Message);
    }
    catch (DivideByZeroException ex)
    {
        Console.WriteLine("A different divide by zero error occurred: " + ex.Message);
    }

    try
    {
        int result = 10 / 0;
    }
    catch (DivideByZeroException ex) when (ex.Message.Contains("divide"))
    {
        Console.WriteLine("An error occurred: " + ex.Message);
    }
    catch (DivideByZeroException ex)
    {
        Console.WriteLine("A different divide by zero error occurred: " + ex.Message);
    }
Try
		Dim result As Integer = 10 \ 0
	Catch ex As DivideByZeroException When ex.Message.Contains("divide")
		Console.WriteLine("An error occurred: " & ex.Message)
	Catch ex As DivideByZeroException
		Console.WriteLine("A different divide by zero error occurred: " & ex.Message)
	End Try
VB   C#

En el ejemplo anterior, el primer bloque catch tratará la DivideByZeroException sólo si el mensaje de excepción contiene la palabra "divide". Si no se cumple la condición, el segundo bloque catch gestionará la excepción.

El bloque Finally garantiza la ejecución del código

En algunos casos, es posible que desee asegurarse de que un determinado fragmento de código se ejecute, tanto si se produce una excepción como si no. Para ello, puede utilizar un bloque finally.

Un bloque finally se coloca después de los bloques try y catch y siempre se ejecuta, independientemente de si se produce una excepción.

He aquí un ejemplo que demuestra el uso de un bloque finally:


    try
    {
        int result = 10 / 2;
    }
    catch (DivideByZeroException ex)
    {
        Console.WriteLine("An error occurred: " + ex.Message);
    }
    finally
    {
        Console.WriteLine("This line will always be executed.");
    }

    try
    {
        int result = 10 / 2;
    }
    catch (DivideByZeroException ex)
    {
        Console.WriteLine("An error occurred: " + ex.Message);
    }
    finally
    {
        Console.WriteLine("This line will always be executed.");
    }
Try
		Dim result As Integer = 10 \ 2
	Catch ex As DivideByZeroException
		Console.WriteLine("An error occurred: " & ex.Message)
	Finally
		Console.WriteLine("This line will always be executed.")
	End Try
VB   C#

En el ejemplo anterior, incluso si el código dentro del bloque try no genera una excepción, el bloque finally seguirá ejecutándose.

Excepciones personalizadas: Adaptar las excepciones a sus necesidades

A veces, es posible que desee crear sus propias excepciones personalizadas para manejar excepciones específicas en su código. Para ello, puede crear una nueva clase que herede de la clase Exception.

He aquí un ejemplo de creación de una excepción personalizada:


    public class CustomException : Exception
    {
        public CustomException(string errorMessage) : base(errorMessage)
        {
        }
    }

    public class CustomException : Exception
    {
        public CustomException(string errorMessage) : base(errorMessage)
        {
        }
    }
Public Class CustomException
	Inherits Exception

		Public Sub New(ByVal errorMessage As String)
			MyBase.New(errorMessage)
		End Sub
End Class
VB   C#

Ahora, puede utilizar esta excepción personalizada en sus bloques try y catch, de la siguiente manera:


    try
    {
        throw new CustomException("This is a custom exception.");
    }
    catch (CustomException ex)
    {
        Console.WriteLine("A custom exception occurred: " + ex.Message);
    }

    try
    {
        throw new CustomException("This is a custom exception.");
    }
    catch (CustomException ex)
    {
        Console.WriteLine("A custom exception occurred: " + ex.Message);
    }
Try
		Throw New CustomException("This is a custom exception.")
	Catch ex As CustomException
		Console.WriteLine("A custom exception occurred: " & ex.Message)
	End Try
VB   C#

En este ejemplo, el bloque try lanza una instancia CustomException, que es capturada y manejada por el bloque catch.

IronPDF: Integración de la funcionalidad PDF con la gestión de excepciones

IronPDF es una popular biblioteca para crear, editar y extraer contenido de archivos PDF en C#. En esta sección, exploraremos cómo puede integrar IronPDF con su enfoque de manejo de excepciones try-catch para manejar errores potenciales con gracia.

Instalación de IronPDF

Para empezar, primero tendrá que instalar el paquete IronPDF NuGet. Puede hacerlo utilizando la consola del gestor de paquetes:

Install-Package IronPdf

También puede buscar "IronPDF" en el cuadro de diálogo "Administrar paquetes NuGet" de Visual Studio.

Creación de un PDF con IronPDF y manejo de excepciones

Supongamos que desea crear un archivo PDF a partir de un HTML cadena utilizando IronPDF. Dado que el proceso de creación de un PDF puede generar excepciones, puede utilizar bloques try-catch para gestionarlas. He aquí un ejemplo de cómo crear un PDF con IronPDF y manejar las excepciones con try-catch:


    using IronPdf;
    using System;
    try
    {
        var renderer = new IronPDF.ChromePdfRenderer();
        string html = "Hello, World!";
        PdfDocument PDF = renderer.RenderHtmlAsPdf(html);
        PDF.SaveAs("output.PDF");
        Console.WriteLine("PDF created successfully.");
    }
    catch (Exception ex)
    {
        Console.WriteLine("An unexpected error occurred: " + ex.Message);
    }

    using IronPdf;
    using System;
    try
    {
        var renderer = new IronPDF.ChromePdfRenderer();
        string html = "Hello, World!";
        PdfDocument PDF = renderer.RenderHtmlAsPdf(html);
        PDF.SaveAs("output.PDF");
        Console.WriteLine("PDF created successfully.");
    }
    catch (Exception ex)
    {
        Console.WriteLine("An unexpected error occurred: " + ex.Message);
    }
Imports IronPdf
	Imports System
	Try
		Dim renderer = New IronPDF.ChromePdfRenderer()
		Dim html As String = "Hello, World!"
		Dim PDF As PdfDocument = renderer.RenderHtmlAsPdf(html)
		PDF.SaveAs("output.PDF")
		Console.WriteLine("PDF created successfully.")
	Catch ex As Exception
		Console.WriteLine("An unexpected error occurred: " & ex.Message)
	End Try
VB   C#

En este ejemplo, el bloque try contiene el código para crear un PDF utilizando IronPDF. Si se produce una excepción durante el proceso, los bloques catch gestionarán el error, mostrando un mensaje de error relevante al usuario.

Extracción de texto de un PDF y gestión de excepciones

También puede extraer texto de un archivo PDF con IronPDF. Al igual que en el ejemplo anterior, puedes utilizar bloques try-catch para manejar posibles excepciones.

He aquí un ejemplo de extracción de texto de un archivo PDF utilizando IronPDF y manejando excepciones:


    using IronPdf;
    using System;
    using System.IO;

    try
    {
        string pdfPath = "input.PDF";
        if (File.Exists(pdfPath))
        {
            PdfDocument PDF = PdfDocument.FromFile(pdfPath);
            string extractedText = PDF.ExtractAllText();
            Console.WriteLine("Text extracted successfully: " + extractedText);
        }
        else
        {
            Console.WriteLine("The specified PDF file does not exist.");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("An unexpected error occurred: " + ex.Message);
    }

    using IronPdf;
    using System;
    using System.IO;

    try
    {
        string pdfPath = "input.PDF";
        if (File.Exists(pdfPath))
        {
            PdfDocument PDF = PdfDocument.FromFile(pdfPath);
            string extractedText = PDF.ExtractAllText();
            Console.WriteLine("Text extracted successfully: " + extractedText);
        }
        else
        {
            Console.WriteLine("The specified PDF file does not exist.");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("An unexpected error occurred: " + ex.Message);
    }
Imports IronPdf
	Imports System
	Imports System.IO

	Try
		Dim pdfPath As String = "input.PDF"
		If File.Exists(pdfPath) Then
			Dim PDF As PdfDocument = PdfDocument.FromFile(pdfPath)
			Dim extractedText As String = PDF.ExtractAllText()
			Console.WriteLine("Text extracted successfully: " & extractedText)
		Else
			Console.WriteLine("The specified PDF file does not exist.")
		End If
	Catch ex As Exception
		Console.WriteLine("An unexpected error occurred: " & ex.Message)
	End Try
VB   C#

Try/Catch en C# (Cómo funciona para los desarrolladores) Figura 1

En este ejemplo, el bloque try contiene el código para extraer texto de un PDF utilizando IronPDF. Si se produce una excepción durante el proceso, los bloques catch gestionarán el error, mostrando un mensaje relevante al usuario.

Conclusión

Combinando IronPDF con su enfoque de gestión de excepciones try-catch, puede crear aplicaciones robustas que gestionen los errores con elegancia al trabajar con archivos PDF. Esto no sólo mejora la estabilidad de sus aplicaciones, sino también la experiencia general del usuario.

Recuerde siempre tener en cuenta las posibles excepciones cuando trabaje con librerías externas como IronPDF, y manejarlas adecuadamente utilizando sentencias try y catch. De este modo, podrá garantizar que sus aplicaciones sean resistentes y fáciles de usar, incluso cuando se enfrenten a problemas inesperados.

IronPDF ofrece un prueba gratuita que le permite explorar sus posibilidades sin ningún compromiso. Si decide seguir utilizando IronPDF después del período de prueba, la licencia comienza a partir de $749,

< ANTERIOR
C# para cada uno (Cómo funcionan las TI para desarrolladores)
SIGUIENTE >
Métodos de extensión de C# (Cómo funciona para los desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123