¿Por qué no usar la palabra error en lugar de excepción? [cerrado]

18

Si nos referimos a las excepciones como errores, ¿por qué no llamarlo un error en lugar de una excepción?

Si en el código se llama excepción y tan pronto como ocurre se llama error. Entonces, ¿por qué no llamarlo un error en primer lugar?

Gracias por cualquier respuesta o comentario.

Niklas
fuente
Espero que los detalles técnicos que menciono ayuden a aclarar la distinción de una excepción frente a un error. Gran pregunta por cierto, +1
Jeremy Thompson
1
En realidad no sé cómo podría confundirlos, ya que son cosas muy diferentes. Las excepciones son casos manejados por el código, que indican algún tipo de error. Típicamente, errores de tipo vago, no exactamente explicables, y tal. - Mientras que los errores ... un error es, por definición, no manejado por el propio código. Ni siquiera son errores, indican falta de lógica donde no debería estar.
tvCa
1
@NiklasRtz: ¿Por qué la gran recompensa? Toneladas de personas habrían respondido independientemente.
ThePopMachine
@ThePopMachine Porque me gustan las enormes recompensas por preguntas que otras personas pueden encontrar interesantes. Estoy solicitando mis preguntas "populares" y respondo todo lo que puedo. He recibido mucha ayuda de las buenas y divertidas preguntas y respuestas. También estoy preparando una nueva pregunta sobre el manejo de errores y los códigos de error para estos programadores ... que no es específico cómo escribir código, sino cómo manejar los errores de una manera limitada y con un estándar estandarizado, por ejemplo, para aplicaciones web que pueden devolver un número limitado de códigos de error, qué tan buenos son los sordos y el nombre de las partes del código.
Niklas

Respuestas:

93

Bueno, es bastante simple: no todas las excepciones son errores (y de manera similar, no todos los errores se manifiestan como excepciones).

Como ejemplo de una excepción que no es un error, si está leyendo un archivo de una unidad USB y alguien saca la unidad del zócalo. Eso generará una excepción (es decir, en la mayoría de los idiomas que admiten excepciones). Pero no es un error en el código.

Por el contrario, un error puede manifestarse como un error de cálculo o algo así. Todavía obtienes una respuesta, simplemente no es la correcta.

Habiendo dicho eso, una excepción que llega hasta la cima de la pila probablemente sea un error. En mi ejemplo de USB anterior, deberías poder detectar esa excepción y presentar un buen error al usuario diciendo "No pudimos leer el archivo porque ya no está conectado". o algo. Si solo les presentas un IOExceptioncódigo de error funky, entonces eso es un error. Pero la excepción en sí no lo es.

Dean Harding
fuente
1
Estás en lo correcto incluso cuando miro cómo lo hago: si un método no consigue obtener el nombre de la ciudad más cercana (Los Ángeles), detecta una excepción y devuelve el nombre del área administrativa más grande (por ejemplo, California), pero como se aplica para cualquier coordenada, un lugar sin ciudad cercana no es un error, es una excepción. ¿Estás de acuerdo?
Niklas
1
@Nicke: Sí, estoy de acuerdo con eso.
Dean Harding
1
Presentar una IOException y un código de error no siempre es un error. Es un diagnostico. A menudo hago eso para los scripts personales, donde el fracaso significa que solo pongo argumentos incorrectos.
Thomas Eding
23

Simple y llanamente, ¡una excepción no es (siempre) un error!

Se produce una excepción (o debería ser) cuando ocurre algo excepcional. Si hay un problema con mi disco duro y no se puede escribir un archivo, eso no es un error. Esa es una falla del hardware.

Un error es generalmente el resultado de una mala programación. Si una aplicación hace algo que no se espera como resultado de un error de programación, eso es un error.


fuente
1
Heh, respondimos casi al mismo tiempo, y básicamente con el mismo ejemplo también :-)
Dean Harding
55
@DeanHarding Las grandes mentes piensan igual, ¿sí? : D
1
Si bien estoy de acuerdo con tu primera oración, debo estar en desacuerdo con tu última oración. El primer error informático (aunque apócrifo) fue, de hecho, una polilla atrapada entre los puntos de un relé. ¿En qué se diferencia un disco duro que funciona mal?
Scott Whitlock
1
@ScottWhitlock Supongo que "error" tiene más de una definición. Siempre supuse que significaba errores causados ​​por humanos: en.wikipedia.org/wiki/Software_bug
1
@ScottWhitlock: y supuestamente los programadores dirían "no es mi culpa, debe ser un error", lo que resultó contraproducente como "error" llegó a significar una falla de software. Hoy, una falla de hardware no se llamaría un error, aunque un error podría provocar una falla de hardware.
jmoreno
20

No són la misma cosa.

Un error es el comportamiento involuntario de una pieza de software: el software no hace lo que se supone que debe hacer. Los errores pueden vivir en todos los niveles de desarrollo de software, desde errores tipográficos simples hasta errores lógicos y especificaciones funcionales inadecuadas.

Una excepción , por el contrario, puede referirse a una condición inusual de un programa, que se desvía del funcionamiento normal o, más específicamente, a la construcción del lenguaje utilizada para señalar y manejar tales condiciones.

El hecho de que ocurra una excepción puede ser un signo de error, pero a menudo no lo es. Por ejemplo, una aplicación que debe descargar un documento de una URL y procesarla localmente puede generar una excepción cuando el servidor remoto está inactivo: la aplicación se desvía del funcionamiento normal (no puede descargar y procesar el documento), pero si maneja la excepción correctamente y se recupera, entonces no hay error.

Por el contrario, la presencia de un error no necesariamente se manifiesta como una excepción. Una aplicación puede descartar silenciosamente los datos que ingrese en lugar de almacenarlos en su base de datos; no se produce ninguna excepción, pero sigue siendo un error.

tdammers
fuente
+1 para definir tus términos. En general, ¡la gente debería hacer eso más a menudo!
yfeldblum
Esta es definitivamente la respuesta más clara. Muy claro y conciso. ¡Gran trabajo!
Locke
5

Las excepciones y los errores no están relacionados en absoluto. Claro, a veces lanzas una excepción y significa un error. Pero a veces solo significa una circunstancia excepcional e inusual, que no es necesariamente un error en el programa. Especialmente en un lenguaje feliz de excepciones como Java, donde cada operación estándar y su perro arroja alrededor de cinco excepciones diferentes, por ejemplo, el archivo de apertura falló, el archivo de lectura falló, etc.

DeadMG
fuente
3

Las excepciones no siempre están relacionadas con errores. Piense en ello como algo que podría salir mal con lo que está haciendo.

Un ejemplo que viene a la mente es InetAddress.getByName (), que se usa para resolver un nombre de dominio. Si algo sucede y se produce una UnknownHostException, no es realmente un problema de código.

Mella
fuente
2

Un error de software es el término común utilizado para describir un error, falla, error, falla o falla en un programa o sistema informático que produce un resultado incorrecto o inesperado, o hace que se comporte de manera no intencionada. Incluso podría ser un error de ortografía en una etiqueta.

Las excepciones son diferentes a los errores. Cada tipo de excepción (infracción de acceso, desbordamiento de pila, etc.) se puede elevar a un depurador como una excepción de "primera oportunidad" o "segunda oportunidad". Las excepciones de primera oportunidad son, por definición, no fatales a menos que no se manejen adecuadamente con un controlador de errores, en cuyo punto se vuelven a generar como una excepción de segunda oportunidad (que solo un depurador puede manejar).

Si ningún depurador maneja una excepción de segunda oportunidad, la aplicación se cierra.

Jeremy Thompson
fuente
2

Usted podría legítimamente plantear una excepción usted mismo, con suerte nunca introduciría un error a propósito.

Alan B
fuente
esto se lee más como un comentario, vea Cómo responder
mosquito
1
La brevedad no significa que no sea una respuesta que destaque la diferencia entre las dos cosas.
Alan B
1

Todas las excepciones no son errores. Puede ser un tema de debate que todos los errores son excepciones o no.

Podemos decir que las excepciones son los eventos que no forman parte del flujo de aplicación normal o esperado. Estos eventos pueden ser independientes de cómo se escribe el código donde, como error, es esencialmente el resultado de un código incorrecto (como un cálculo incorrecto).

Aquí hay un ejemplo de cómo no manejar una excepción puede ser un error.

Supongamos que hay un programa que escribe algunos datos en un dispositivo de almacenamiento externo. Mientras escribía, el dispositivo de almacenamiento externo se desconectó, se bloqueó o puede destruirse (por cualquier razón). Ahora, este es un caso excepcional, independientemente de que el lenguaje de programación admita un manejo excepcional o no, si el programa se bloquea o se comporta mal debido a este evento, es un error. (El usuario final puede no tener idea de lo que sucedió. También es muy desagradable) . Pero si el programa aborta el proceso con gracia, notifique al usuario (en otras palabras, maneje la excepción), esto claramente no es un error.

Los lenguajes de programación try catch machanism brindados son esencialmente una herramienta para facilitar nuestra salida para manejar eventos inesperados.

Rajat Saini
fuente
1

Sinopsis : Las excepciones son evidencia de malos resultados, los errores son (algunas de las) causas de malos resultados. El problema (a resolver) no es la excepción, el problema es lo que causó la excepción.

Resonación: un error es un defecto en el diseño o implementación de un producto (no limitado al software). Por ejemplo, no usar un relé con la capacidad adecuada (tiempo / sensibilidad / confiabilidad / capacidad) debido a especificaciones incorrectas o un simple error de construcción. Una excepción es una desviación del mundo real / tiempo de ejecución del comportamiento predicho (¿me atrevo a decir 'esperado'?), Por ejemplo, la pérdida de control de un vehículo mientras conduce.

Claramente, un error puede causar una excepción ya que el ejemplo en 1) podría conducir al ejemplo en 2). Pero no todas las excepciones serían causadas por errores, por ejemplo, pérdida de control de un vehículo porque el operador sufrió un derrame cerebral.

Kristian H
fuente
0

Dado que esta pregunta ha sido reabierta para una recompensa, permítanme mencionar mi artículo de CUJ de 2003 titulado "¿Una excepción o un error?", Que parece abordar exactamente la pregunta del OP.

Básicamente, el artículo define los términos "error" y "excepción" (dando ejemplos), y propone estrategias para tratar con cada uno.

El artículo propone no "manejar" los errores, sino marcarlos con afirmaciones. En contraste, las verdaderas excepciones requieren manejo a través del código (posiblemente lanzando / atrapando excepciones).

El punto principal es que los errores requieren exactamente la estrategia opuesta a las excepciones.

El artículo mencionado ya está disponible en Dr.Dobb's en: http://www.drdobbs.com/an-exception-or-a-bug/184401686

Miro Samek
fuente