¿Por qué los bloques de captura vacíos son una mala idea? [cerrado]

Resuelto Samuel Carrijo asked hace 15 años • 20 respuestas

Acabo de ver una pregunta sobre try-catch , ¿qué personas (incluido Jon Skeet) dicen que los bloques catch vacíos son una muy mala idea? ¿Por qué esto? ¿No existe ninguna situación en la que un cierre vacío no sea una decisión de diseño incorrecta?

Quiero decir, por ejemplo, a veces quieres obtener información adicional de algún lugar (servicio web, base de datos) y realmente no te importa si obtendrás esta información o no. Así que intenta obtenerlo, y si pasa algo, está bien, simplemente agregaré un "captura (excepción ignorada) {}" y eso es todo.

Samuel Carrijo avatar Aug 05 '09 23:08 Samuel Carrijo
Aceptado

Por lo general, el try-catch vacío es una mala idea porque estás tragando silenciosamente una condición de error y luego continúas con la ejecución. En ocasiones, esto puede ser lo correcto, pero a menudo es una señal de que un desarrollador vio una excepción, no supo qué hacer al respecto y, por lo tanto, utilizó un mensaje vacío para silenciar el problema.

Es el equivalente en programación a poner cinta negra sobre una luz de advertencia del motor.

Creo que la forma de abordar las excepciones depende de en qué capa del software esté trabajando: Excepciones en la selva tropical .

Ned Batchelder avatar Aug 05 '2009 16:08 Ned Batchelder

Son una mala idea en general porque es una condición verdaderamente rara en la que una falla (condición excepcional, de manera más genérica) se resuelve adecuadamente sin respuesta alguna. Además de eso, catchlos bloques vacíos son una herramienta común utilizada por las personas que usan el motor de excepciones para verificar errores que deberían hacer de manera preventiva.

Decir que siempre es malo es falso... eso es cierto para muy pocas cosas. Puede haber circunstancias en las que no le importe que haya habido un error o que la presencia del error de alguna manera indique que no puede hacer nada al respecto de todos modos (por ejemplo, cuando escribe un error anterior en un archivo de registro de texto y obtienes un IOException, lo que significa que no pudiste escribir el nuevo error de todos modos).

Adam Robinson avatar Aug 05 '2009 16:08 Adam Robinson

No me extendería tanto como para decir que quien usa bloques catch vacíos es un mal programador y no sabe lo que está haciendo...

Utilizo bloques catch vacíos si es necesario. A veces, el programador de la biblioteca que estoy consumiendo no sabe lo que está haciendo y lanza excepciones incluso en situaciones en las que nadie las necesita.

Por ejemplo, considere alguna biblioteca de servidor http, no me importa si el servidor arroja una excepción porque el cliente se ha desconectado y index.htmlno se ha podido enviar.

lubos hasko avatar Aug 05 '2009 16:08 lubos hasko

Sólo se deben lanzar excepciones si realmente hay una excepción: algo que sucede más allá de la norma. Un bloque catch vacío básicamente dice "algo malo está sucediendo, pero no me importa". Esta es una mala idea.

Si no desea manejar la excepción, deje que se propague hacia arriba hasta que alcance algún código que pueda manejarla. Si nada puede manejar la excepción, debería eliminar la aplicación.

Reed Copsey avatar Aug 05 '2009 16:08 Reed Copsey

Creo que está bien si detecta un tipo de excepción en particular y sabe que solo se generará por una razón en particular , y espera esa excepción y realmente no necesita hacer nada al respecto.

Pero incluso en ese caso, podría ser necesario enviar un mensaje de depuración.

balpha avatar Aug 05 '2009 16:08 balpha