2012-01-25 12 views
10

Duplicar posible:
When to use try/catch blocks?
Main method code entirely inside try/catch: Is it bad practice?
When to use Try Catch blocks¿Debo siempre envolver mi código en intentar ... atrapar bloques?

excepciones pueden ocurrir en cualquier lugar, así que esto me hizo pensar: siempre debería envolver mi código en bloques try..catch ?

Esto es para C#.

(puede ser que falte algo fundamental aquí, como estoy todavía un novato)

EDIT: Parece que este hecho no era una pregunta muy inteligente. Lo único que hemos aprendido en la escuela es usar try ... catch para evitar accidentes. Lo que hicimos con la excepción fue mostrar un MessageBox para decirle al usuario que 'algo salió mal al escribir este archivo'.

+1

¿De qué idioma estamos hablando aquí? – Timst

+0

@Timst C#. No me di cuenta de que hacía una diferencia, actualizaré mi pregunta. –

+1

@KenWhite Hice una búsqueda, pero no devolvió esa pregunta. –

Respuesta

50

Las excepciones pueden ocurrir en cualquier lugar, así que esto me hizo pensar: ¿Debería siempre envolver mi código en try..catch blocks?

Buena pregunta. Aquí hay una pregunta relacionada:

Los maniacos con empuñadura de hacha pueden ser casi cualquier lugar, entonces: ¿debería usar armadura corporal resistente a los hachas las 24 horas del día?

Tengo la suerte de vivir en un barrio donde el número de maníacos con hachas es lo suficientemente bajo como para no usar armadura cuando salgo de la casa. Pero supongo que no. ¿Es la solución correcta para usar la armadura todo el tiempo o encarcelar a los maníacos?

Si sus programas arrojan tantas excepciones que necesita manejar esas excepciones en todas partes, entonces usted tiene un gran problema. La solución a ese problema no es armarse y poner el manejo de excepciones en todas partes. La solución a ese problema es eliminar el código que arroja las excepciones, y si no puede eliminarlo, entonces lo aísla en una pequeña región de código que utiliza el control de excepciones.

+12

+1 para maníacos con hacha. – Aaron

+4

[Vexing Exceptions] (http://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx) - Artículo de Eric Lippert sobre este tema. – Brian

+0

+1 Gran uso de una analogía. Hace la explicación mucho más clara. – Sabuncu

3

Absolutamente no. Aquí hay un gran CodeProject article on working with exceptions para que vayas.

Pero más a su punto en el OP, las excepciones solo se deben manejar donde se deben manejar. Esto significa que una aplicación bien implementada tendrá algunos puntos en la aplicación (dependiendo del alcance del curso) donde se manejarán una cantidad de excepciones derivadas de Excepciones específicas y aún menos lugares (uno por hilo por cada número de mejores prácticas). sugestiones) donde se manejará la Excepción genérica.

Al trabajar con excepciones, no piense en términos de una función que devuelve información de error. Las excepciones alivian enormemente el tedio de filtrar una condición de error a través de su cadena de llamadas.

2

No, no debe envolver todo su código en un try-catch. Respondí una pregunta similar aquí en dba.stackexchange.com - how much overhead an error in RDBMS has.

En general, solo debe usar el manejo de excepciones si hay algo específico que desea hacer con el mensaje de error, o si el código que falló produce resultados que no se utilizan en ningún otro lado. Si la aplicación está orientada al usuario, obviamente tampoco quiere que vean mensajes de excepción sin formato. En todos estos casos, debe registrar el error ... no tiene sentido atrapar una excepción que no planea manejar (captura vacía = malo). Pero, de lo contrario, querrá que se emita una excepción.

Por ejemplo, realiza una llamada a la base de datos y falla con una excepción de SQL. La siguiente parte de tu código está diseñada para procesar ese resultado, por lo que querrás que se genere una excepción y se detenga la ejecución del programa.

Si su código produce excepciones regularmente (y desconoce la lógica), probablemente deba reconsiderar su enfoque.

Cuestiones relacionadas