Tratamiento de múltiples excepciones
¿Qué es el manejo de múltiples excepciones?
En ocasiones, un bloque de código puede generar varios tipos de excepciones. El manejo de múltiples excepciones nos permite capturar y manejar cada tipo de excepción por separado, lo que proporciona un control más preciso sobre el manejo de errores.
Conceptos clave
- Bloques catch/except múltiples: Cada lenguaje proporciona una forma de definir múltiples bloques catch/except, cada uno diseñado para manejar un tipo de excepción específico.
- Jerarquía de excepciones: Las excepciones suelen organizarse en una jerarquía. Es importante tener en cuenta esta jerarquía al manejar múltiples excepciones, ya que un bloque catch/except puede capturar excepciones de sus subclases.
- Bloque finally/finally: Algunos lenguajes proporcionan un bloque finally/finally que se ejecuta siempre, independientemente de si se lanza o no una excepción. Esto es útil para realizar tareas de limpieza, como cerrar archivos o liberar recursos.
Ejemplos en diferentes lenguajes de programación
A continuación, se muestran ejemplos de manejo de múltiples excepciones en C++, C#, Java y Python:
C++
C++
#include <iostream>
#include <stdexcept>
int main() {
try {
// Código que puede generar múltiples excepciones
int numerador = 10;
int denominador = 0;
if (denominador == 0) {
throw std::runtime_error("División por cero");
}
int resultado = numerador / denominador;
std::cout << "Resultado: " << resultado << std::endl;
int arreglo[1];
arreglo[2] = 5; // Genera una excepción de acceso fuera de límites
} catch (const std::runtime_error& e) {
std::cerr << "Error de tiempo de ejecución: " << e.what() << std::endl;
} catch (const std::out_of_range& e) {
std::cerr << "Error de fuera de rango: " << e.what() << std::endl;
} catch (...) {
std::cerr << "Error desconocido" << std::endl;
}
return 0;
}
C#
C#
using System;
public class EjemploMultiplesExcepciones {
public static void Main(string[] args) {
try {
// Código que puede generar múltiples excepciones
int numerador = 10;
int denominador = 0;
int resultado = numerador / denominador;
Console.WriteLine($"Resultado: {resultado}");
int[] arreglo = new int[1];
arreglo[2] = 5;
} catch (DivideByZeroException e) {
Console.WriteLine($"Error de división por cero: {e.Message}");
} catch (IndexOutOfRangeException e) {
Console.WriteLine($"Error de índice fuera de rango: {e.Message}");
} catch (Exception e) {
Console.WriteLine($"Error general: {e.Message}");
} finally {
Console.WriteLine("Bloque finally ejecutado.");
}
}
}
Java
Java
public class EjemploMultiplesExcepciones {
public static void main(String[] args) {
try {
// Código que puede generar múltiples excepciones
int numerador = 10;
int denominador = 0;
int resultado = numerador / denominador;
System.out.println("Resultado: " + resultado);
int[] arreglo = new int[1];
arreglo[2] = 5;
} catch (ArithmeticException e) {
System.err.println("Error aritmético: " + e.getMessage());
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("Error de índice fuera de límites: " + e.getMessage());
} catch (Exception e) {
System.err.println("Error general: " + e.getMessage());
} finally {
System.out.println("Bloque finally ejecutado.");
}
}
}
Python
Python
def ejemplo_multiples_excepciones():
try:
# Código que puede generar múltiples excepciones
numerador = 10
denominador = 0
resultado = numerador / denominador
print(f"Resultado: {resultado}")
arreglo = [1]
arreglo[2] = 5
except ZeroDivisionError as e:
print(f"Error de división por cero: {e}")
except IndexError as e:
print(f"Error de índice fuera de rango: {e}")
except Exception as e:
print(f"Error general: {e}")
finally:
print("Bloque finally ejecutado.")
ejemplo_multiples_excepciones()
Puntos clave
- El orden de los bloques catch/except es importante. Las excepciones más específicas deben capturarse antes que las excepciones más generales.
- El bloque finally/finally es útil para garantizar que se ejecute el código de limpieza.
- Manejar múltiples excepciones de forma adecuada hace que el código sea más robusto y fácil de mantener.
Comentarios
Publicar un comentario