Posts Tagged ‘Arquitectura .net’

Excepciones en .NET, ¿seguro que quieres manejar un System.Exception?

25 septiembre 2009

Hola, aquí Luis (presentación copiada de los blogs de los equipos de productos de MS) 🙂

Retomando un post anterior relacionado con el manejo de excepciones y la diferencia entre Throw y Throw ex, he leído algunas cosas interesantes sobre el manejo general de excepciones.

El título de uno de los post que he leído, dice algo como: “Porque un empty catch o un catch(exception) es una mala idea“, pero visto el profundo debate de comentarios que ha provocado el post, yo no me atrevería de decir tanto 🙂

El artículo en cuestión, recomienda no hacer catch del tipo System.Exception, y utilizar Excepciones hija (ArgumentException, etc). Es decir, fíjate en la operación que estás haciendo, y en las excepciones que se pueden lanzar. Ejemplo, si intentas abrir un fichero, una de las posibles excepciones será FileNotFoundException.

La razón que da el artículo, es que una excepción del tipo System.Exception, significa un fallo de sistema (recomiendo que leáis estos 2 artículos que se enlazan desde el primer post y que son del gran Krzysztof Cwalina:

y los fallos de sistema, “no tienen nada que manejar”. Vamos, que si tienes un fallo de puntero en memoria, busca el puntero y llévalo al taller!…

Pero entonces, ¿nos tenemos que olvidar del típico bloque?

try

catch ex as Exception

Pues hombre, aquellos de vosotros que estéis acostumbrados a desarrollar servicios 24×7 y a integrar varios sistemas, cada uno de su padre y de su madre, seguramente os parecerá duro renunciar a dicho bloque. Sinceramente, a mi también me lo parece. En esas ocasiones, creo que conviene manejar fallos de sistema y hacer un buen log del mismo, además de tomar la decisión de si queremos matar el servicio o seguimos funcionando. En los comentarios del post inicial, veréis que también se discute este tema, y el autor del post, defiende que en estos casos es mejor no manejar dicha excepcion y dejar que la aplicación “explote” con el típico mensaje de windows y la posibilidad de enviar el registro a MS… En mi opinión, decidirlo vosotros según el sistema que estéis desarrollando y sus necesidades.

En resumen, creo que es buena práctica manejar las excepciones propias de las operaciones que estamos realizando, y dejar abierto a las necesidades del sistema, si queréis manejar fallos del sistema, o no. Como veréis, de nuevo en informática tiramos del principio del gallego… depende!! 🙂

Más info de interés al respecto:

Espero que os sirva!!

Saludos.

Anuncios