En la programación, los errores son inevitables y pueden ocurrir por diversas razones, desde errores de sintaxis hasta problemas inesperados durante la ejecución del programa, por eso es importante conocer y saber manejar las estructuras de control de errores en programación. Para manejar estos errores, los lenguajes de programación incluyen estructuras de control de errores, como las siguientes:
- Bloques de control de excepciones try-catch-finally.
- Estructura throw, que permite lanzar una excepción personalizada.
Estas estructuras de control de errores en programación, permiten detectar, manejar y prevenir fallos en tiempo de ejecución.
Existen dos tipos principales de errores en programación:
- Errores en tiempo de compilación: Ocurren antes de que el programa se ejecute, normalmente debido a errores de sintaxis o de tipos de datos.
- Errores en tiempo de ejecución: Se producen mientras el programa se está ejecutando, generalmente por condiciones inesperadas como dividir por cero o intentar acceder a un archivo inexistente.
Errores en tiempo de compilación.
Los errores en tiempo de compilación son detectados por el compilador antes de ejecutar el programa. Suelen deberse a:
- Errores de sintaxis (por ejemplo, olvidar un punto y coma en C# o Java).
- Uso incorrecto de tipos de datos.
- Declaraciones incorrectas de variables o funciones.
Ejemplo de error en tiempo de compilación.
C#.
int x = "Hola"; // Error: no se puede asignar una cadena a un entero
Java.
int x = "Hola"; // Error de tipos: no se puede asignar String a int
Python.
x: int = "Hola" # Error en lenguajes con tipado estático, aunque Python lo permite sin restricciones.
Visual Basic.
Dim x As Integer = "Hola" ' Error de tipos: no se puede asignar una cadena a un entero
Errores en tiempo de ejecución.
Los errores en tiempo de ejecución ocurren cuando el programa se ejecuta y enfrenta una situación inesperada. Algunos ejemplos incluyen:
- División por cero.
- Acceso a índices fuera de los límites de una lista o arreglo.
- Intento de abrir un archivo inexistente.
Ejemplo de error en tiempo de ejecución.
C#.
int x = 10;
int y = 0;
Console.WriteLine(x / y); // Error: División por cero en tiempo de ejecución
Java.
int x = 10;
int y = 0;
System.out.println(x / y); // Error: ArithmeticException (división por cero)
Python.
x = 10
y = 0
print(x / y) # Error: ZeroDivisionError
Visual Basic.
Dim x As Integer = 10
Dim y As Integer = 0
Console.WriteLine(x / y) ' Error en tiempo de ejecución: división por cero
Manejo de las estructuras de control de errores en programación. Estructuras de control de excepciones.
Para evitar que los errores en tiempo de ejecución provoquen la terminación del programa, los lenguajes de programación ofrecen mecanismos de control de errores. Las estructuras más comunes incluyen:
Bloque Try-Catch.
El bloque try-catch permite manejar excepciones capturando los errores y ejecutando un código alternativo en caso de fallo.
C#.
try
{
int x = 10;
int y = 0;
Console.WriteLine(x / y); // Esto generará una excepción
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Error: No se puede dividir por cero.");
}
Java.
try {
int x = 10;
int y = 0;
System.out.println(x / y); // Esto generará una excepción
} catch (ArithmeticException ex) {
System.out.println("Error: No se puede dividir por cero.");
}
Python.
try:
x = 10
y = 0
print(x / y) # Esto generará una excepción
except ZeroDivisionError:
print("Error: No se puede dividir por cero.")
Visual Basic.
Try
Dim x As Integer = 10
Dim y As Integer = 0
Console.WriteLine(x / y) ' Esto generará una excepción
Catch ex As DivideByZeroException
Console.WriteLine("Error: No se puede dividir por cero.")
End Try
Bloque Finally.
El bloque finally se usa para ejecutar código que debe ejecutarse siempre, independientemente de si hubo o no una excepción.
C#.
try
{
int[] numeros = { 1, 2, 3 };
Console.WriteLine(numeros[5]); // Error: índice fuera de rango
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("Error: Índice fuera de rango.");
}
finally
{
Console.WriteLine("Este código siempre se ejecuta.");
}
Java.
try {
int[] numeros = { 1, 2, 3 };
System.out.println(numeros[5]); // Error: Índice fuera de rango
} catch (ArrayIndexOutOfBoundsException ex) {
System.out.println("Error: Índice fuera de rango.");
} finally {
System.out.println("Este código siempre se ejecuta.");
}
Python.
try:
numeros = [1, 2, 3]
print(numeros[5]) # Error: índice fuera de rango
except IndexError:
print("Error: Índice fuera de rango.")
finally:
print("Este código siempre se ejecuta.")
Visual Basic.
Try
Dim numeros() As Integer = {1, 2, 3}
Console.WriteLine(numeros(5)) ' Error: índice fuera de rango
Catch ex As IndexOutOfRangeException
Console.WriteLine("Error: Índice fuera de rango.")
Finally
Console.WriteLine("Este código siempre se ejecuta.")
End Try
Bloque throw.
El bloque throw se usa para generar manualmente una excepción.
C#.
throw new Exception("Este es un error personalizado.");
Java.
throw new Exception("Este es un error personalizado.");
Python.
raise Exception("Este es un error personalizado.")
Visual Basic.
Throw New Exception("Este es un error personalizado.")
Tipos de excepciones en programación.
Tipo de Error | Descripción | Ejemplo de Lenguajes |
---|---|---|
ArithmeticException | Ocurre cuando hay un error en una operación aritmética, como la división por cero. | Java, C# |
NullReferenceException / NullPointerException | Se lanza cuando se intenta acceder a un objeto nulo. | C# (NullReferenceException), Java (NullPointerException) |
IndexOutOfRangeException / ArrayIndexOutOfBoundsException | Se lanza cuando se intenta acceder a un índice fuera del rango de un array o lista. | Java (ArrayIndexOutOfBoundsException), C# (IndexOutOfRangeException), Python (IndexError) |
IOException | Error de entrada/salida, por ejemplo, cuando no se puede leer o escribir un archivo. | C#, Java, VB.NET |
FileNotFoundException | Se lanza cuando se intenta acceder a un archivo que no existe. | VB.NET, C#, Java |
KeyNotFoundException | Se lanza cuando se busca una clave en un diccionario y esta no existe. | C#, Python (KeyError) |
TypeError | Se lanza cuando una operación o función es aplicada a un objeto de un tipo inapropiado. | Python, JavaScript |
ValueError | Ocurre cuando se pasa un valor incorrecto a una función o método. | Python |
OverflowException | Se lanza cuando una operación aritmética genera un valor fuera del rango permitido. | C# |
FormatException | Se lanza cuando un formato de cadena no es el esperado en una conversión. | C#, VB.NET |
Exception | Clase base de todas las excepciones. Se puede lanzar para representar un error genérico. | Java, C#, Python, VB.NET |