Estoy trabajando en la limpieza de algunos de mis códigos y llegué a un punto en el que no estaba seguro de qué ruta sería mejor.Múltiple o simple Try Catch
Actualmente tengo un único bloque de captura de prueba sobre la mayoría de mi método y maneja algunas excepciones por separado al final, pero pensé que sería mejor tener más bloques de prueba para el mantenimiento. Sin embargo, mientras descifraba el código llegué a un punto en el que estaba escribiendo varios bloques para el mismo tipo de excepción. Puedo ver el lado positivo de escribir un bloque para cada parte ya que puedo dar más detalles de por qué falló.
Mi pregunta es esta ... ¿hay algún inconveniente en hacer esto? ¿Podría haber problemas de rendimiento o algún otro monstruo oculto que no estoy viendo?
Además, ¿cuál es la forma preferida de manejar múltiples excepciones en un método? ¿Existe un estándar de la industria?
Sólo para ilustrar mejor mi punto aquí es un código de pseudo
//multiple try catch for same exception
try {
//some code here
} catch (MyException e) {
//specific error message here
}
try {
//some different code here
} catch (MyException e) {
//more specific error message indicating a different issue
}
Parece que necesita escribir un mensaje de error por cada excepción lanzada, cerca del punto donde se lanza. ¿Pero por qué? A menudo, la única información importante es que la operación como un todo falló. – Raedwald
@Raedwald: Siento que agregar más información sobre por qué falló la operación será útil para el mantenimiento de las personas que trabajan con esto después de mí. Estoy usando algunos complementos de código abierto así que para cualquiera que no los conozca puedo agregar un poco más de detalle. – Shaded
Es por eso que el registro es tan importante, sombreado. No tiene que cargar su código con un procesamiento de error específico si, como sugiere Raedwalk, la recuperación es inútil de todos modos. Mi técnica general es registrar todo lo que considero importante y volver a lanzar la excepción. De hecho, si el error no tiene remedio, vuelvo a lanzar una excepción de tiempo de ejecución y la capturo en el nivel más alto para la limpieza final. –