Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Manejo de Errores | Estructuras de Datos y Manejo de Archivos
C# Más Allá de lo Básico

bookManejo de Errores

Es posible que hayas encontrado el término error en tiempo de ejecución en capítulos anteriores. Un error en tiempo de ejecución es un error que ocurre mientras el programa se está ejecutando; de ahí el nombre "error en tiempo de ejecución".

Normalmente, cuando ocurre un error en tiempo de ejecución, el programa se bloquea o deja de responder.

El compilador puede ayudarte señalando la mayoría de los errores en nuestro código, pero los errores en tiempo de ejecución suelen ser impredecibles y a menudo dependen de parámetros inciertos.

Por ejemplo, si la ruta del archivo pasada a StreamReader es inválida o no existe, se producirá un error en tiempo de ejecución y el programa se bloqueará. Por lo tanto, a menudo podemos colocar este tipo de código peligroso dentro de bloques try-catch para intentar ejecutar un código y, en caso de que falle, capturar y manejar el error en lugar de provocar que el programa se bloquee.

A continuación se muestra la sintaxis del bloque try-catch:

index.cs

index.cs

copy
1234567
try { // code to try } catch (Exception errorVar) { // code to handle error }

Aquí Exception es una palabra clave que representa el tipo de dato Exception.

Ejemplo

index.cs

index.cs

copy
1234567891011121314151617
using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Note
Nota

Podemos omitir la parte (Exception error) de la sentencia catch si no utilizamos error.

A continuación se presentan algunos casos comunes donde puede ocurrir un error en tiempo de ejecución:

División por cero

index.cs

index.cs

copy
123456789101112131415161718
using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }

Índice no válido de un arreglo o una lista

index.cs

index.cs

copy
1234567891011121314151617
using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }

Clave no encontrada (para diccionarios):

index.cs

index.cs

copy
123456789101112131415161718192021
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }

El bloque finally

También existe un bloque de código opcional llamado finally que se ejecuta después de que se ejecuta el bloque catch:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }

1. ¿Cuál será la salida del siguiente programa?

2. En C#, ¿cuál es el propósito del bloque finally?

3. ¿Cuál de las siguientes afirmaciones es verdadera respecto al bloque try-catch en C#?

question mark

¿Cuál será la salida del siguiente programa?

Select the correct answer

question mark

En C#, ¿cuál es el propósito del bloque finally?

Select the correct answer

question mark

¿Cuál de las siguientes afirmaciones es verdadera respecto al bloque try-catch en C#?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 9

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you explain how the try-catch block works with an example?

What are some best practices for handling runtime errors?

Can you list other common runtime errors besides the ones mentioned?

Awesome!

Completion rate improved to 2.04

bookManejo de Errores

Desliza para mostrar el menú

Es posible que hayas encontrado el término error en tiempo de ejecución en capítulos anteriores. Un error en tiempo de ejecución es un error que ocurre mientras el programa se está ejecutando; de ahí el nombre "error en tiempo de ejecución".

Normalmente, cuando ocurre un error en tiempo de ejecución, el programa se bloquea o deja de responder.

El compilador puede ayudarte señalando la mayoría de los errores en nuestro código, pero los errores en tiempo de ejecución suelen ser impredecibles y a menudo dependen de parámetros inciertos.

Por ejemplo, si la ruta del archivo pasada a StreamReader es inválida o no existe, se producirá un error en tiempo de ejecución y el programa se bloqueará. Por lo tanto, a menudo podemos colocar este tipo de código peligroso dentro de bloques try-catch para intentar ejecutar un código y, en caso de que falle, capturar y manejar el error en lugar de provocar que el programa se bloquee.

A continuación se muestra la sintaxis del bloque try-catch:

index.cs

index.cs

copy
1234567
try { // code to try } catch (Exception errorVar) { // code to handle error }

Aquí Exception es una palabra clave que representa el tipo de dato Exception.

Ejemplo

index.cs

index.cs

copy
1234567891011121314151617
using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Note
Nota

Podemos omitir la parte (Exception error) de la sentencia catch si no utilizamos error.

A continuación se presentan algunos casos comunes donde puede ocurrir un error en tiempo de ejecución:

División por cero

index.cs

index.cs

copy
123456789101112131415161718
using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }

Índice no válido de un arreglo o una lista

index.cs

index.cs

copy
1234567891011121314151617
using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }

Clave no encontrada (para diccionarios):

index.cs

index.cs

copy
123456789101112131415161718192021
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }

El bloque finally

También existe un bloque de código opcional llamado finally que se ejecuta después de que se ejecuta el bloque catch:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }

1. ¿Cuál será la salida del siguiente programa?

2. En C#, ¿cuál es el propósito del bloque finally?

3. ¿Cuál de las siguientes afirmaciones es verdadera respecto al bloque try-catch en C#?

question mark

¿Cuál será la salida del siguiente programa?

Select the correct answer

question mark

En C#, ¿cuál es el propósito del bloque finally?

Select the correct answer

question mark

¿Cuál de las siguientes afirmaciones es verdadera respecto al bloque try-catch en C#?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 9
some-alt