Manejo 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
1234567try { // 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
1234567891011121314151617using 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); } } }
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
123456789101112131415161718using 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
1234567891011121314151617using 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
123456789101112131415161718192021using 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
12345678910111213141516171819202122232425using 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#?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
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
Manejo 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
1234567try { // 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
1234567891011121314151617using 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); } } }
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
123456789101112131415161718using 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
1234567891011121314151617using 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
123456789101112131415161718192021using 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
12345678910111213141516171819202122232425using 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#?
¡Gracias por tus comentarios!