Wenn wir Ausnahmen als Fehler bezeichnen, warum nicht einfach einen Fehler anstelle einer Ausnahme?
Wenn es im Code als Ausnahme bezeichnet wird und sobald es auftritt, wird es als Fehler bezeichnet. Warum nennst du es dann nicht gleich einen Bug?
Vielen Dank für jede Antwort oder Kommentar.
Antworten:
Nun, es ist ziemlich einfach: Nicht alle Ausnahmen sind Fehler (und in ähnlicher Weise manifestieren sich nicht alle Fehler als Ausnahmen).
Als Beispiel für eine Ausnahme, die kein Fehler ist, wenn Sie eine Datei von einem USB-Laufwerk lesen und jemand das Laufwerk aus dem Sockel zieht. Das wird eine Ausnahme auslösen (in den meisten Sprachen, die also Ausnahmen unterstützen). Aber es ist kein Fehler im Code.
Umgekehrt kann sich ein Fehler als Rechenfehler oder ähnliches manifestieren. Du bekommst immer noch eine Antwort, es ist einfach nicht die richtige.
Having said that, eine Ausnahme, die ihren Weg wahrscheinlich den ganzen Weg an die Spitze des Stapels macht ist ein Fehler. In meinem obigen USB-Beispiel sollten Sie in der Lage sein, diese Ausnahme abzufangen und dem Benutzer einen netten Fehler mit der Meldung "Wir konnten nicht aus der Datei lesen, da sie nicht mehr verbunden ist." oder so. Wenn Sie ihnen nur einen
IOException
und einige funky Fehlercode präsentieren, dann ist das ein Fehler. Aber die Ausnahme selbst ist nicht.quelle
Schlicht und einfach, eine Ausnahme ist nicht (immer) ein Fehler!
Eine Ausnahme wird ausgelöst (oder sollte es sein), wenn etwas Außergewöhnliches passiert. Wenn es ein Problem mit meiner Festplatte gibt und eine Datei nicht geschrieben werden kann, ist das kein Fehler. Das ist ein Hardwarefehler.
Ein Fehler ist in der Regel auf eine schlechte Programmierung zurückzuführen. Wenn eine Anwendung etwas tut, das aufgrund eines Programmierfehlers nicht erwartet wird, ist dies ein Fehler.
quelle
Sie sind nicht dasselbe.
Ein Fehler ist ein unbeabsichtigtes Verhalten einer Software: Die Software tut nicht das, was sie tun soll. Fehler können auf allen Ebenen der Softwareentwicklung auftreten, von einfachen alten Tippfehlern über logische Fehler bis hin zu unzureichenden Funktionsspezifikationen.
Eine Ausnahme kann sich dagegen entweder auf einen ungewöhnlichen Zustand eines Programms beziehen, der vom normalen Betrieb abweicht, oder genauer auf das Sprachkonstrukt, das zum Signalisieren und Behandeln solcher Zustände verwendet wird.
Die Tatsache, dass eine Ausnahme auftritt, kann ein Zeichen für einen Fehler sein, ist es aber häufig nicht. Beispielsweise kann eine Anwendung, die ein Dokument von einer URL herunterladen und lokal verarbeiten soll, eine Ausnahme auslösen, wenn der Remoteserver heruntergefahren ist: Die Anwendung weicht vom normalen Betrieb ab (sie kann das Dokument nicht herunterladen und verarbeiten), aber wenn dies der Fall ist Behandelt die Ausnahme richtig und stellt sie wieder her, dann liegt kein Fehler vor.
Umgekehrt ist das Vorhandensein eines Fehlers nicht unbedingt eine Ausnahme. Eine Anwendung verwirft möglicherweise im Hintergrund die eingegebenen Daten, anstatt sie in der Datenbank zu speichern. Es wird keine Ausnahme geworfen, aber es ist immer noch ein Fehler.
quelle
Ausnahmen und Bugs hängen überhaupt nicht zusammen. Klar, manchmal wirft man eine Ausnahme und das bedeutet einen Fehler. Aber manchmal bedeutet es nur einen außergewöhnlichen, ungewöhnlichen Umstand, der nicht unbedingt ein Programmfehler ist. Besonders in einer ausnahmefreudigen Sprache wie Java, in der jede Standardoperation und ihr Hund ungefähr fünf verschiedene Ausnahmen auslöst - zum Beispiel: Öffnen der Datei fehlgeschlagen, Lesen der Datei fehlgeschlagen usw.
quelle
Ausnahmen hängen nicht immer mit Fehlern zusammen. Betrachten Sie es als etwas, das mit dem, was Sie tun, schief gehen könnte.
Ein Beispiel dafür ist InetAddress.getByName (), mit dem ein Domänenname aufgelöst wird. Wenn etwas passiert und eine UnknownHostException ausgelöst wird, handelt es sich nicht wirklich um ein Code-Problem.
quelle
Ein Softwarefehler ist der häufig verwendete Begriff, um einen Fehler, einen Defekt, einen Fehler, einen Fehler oder einen Fehler in einem Computerprogramm oder -system zu beschreiben, der ein falsches oder unerwartetes Ergebnis erzeugt oder dazu führt, dass es sich unbeabsichtigt verhält. Könnte sogar ein Rechtschreibfehler auf einem Etikett sein.
Ausnahmen unterscheiden sich von Bugs. Jede Art von Ausnahme (Zugriffsverletzung, Stapelüberlauf usw.) kann als Ausnahme "erste Chance" oder "zweite Chance" in einen Debugger umgewandelt werden. Ausnahmen der ersten Chance sind per Definition nicht schwerwiegend, es sei denn, sie werden nicht ordnungsgemäß mit einem Fehlerbehandlungsprogramm behandelt. Ab diesem Zeitpunkt werden sie erneut als Ausnahme der zweiten Chance (die nur ein Debugger behandeln kann) ausgelöst.
Wenn kein Debugger eine Ausnahme der zweiten Chance behandelt, wird die Anwendung beendet.
quelle
Sie könnten legitimerweise selbst eine Ausnahme auslösen, Sie würden hoffentlich nie absichtlich einen Fehler einführen.
quelle
Alle Ausnahmen sind keine Bugs. Es kann ein Diskussionsthema sein, dass alle Bugs Ausnahmen sind oder nicht.
Wir können sagen, dass Ausnahmen die Ereignisse sind, die nicht Teil des normalen oder erwarteten Anwendungsflusses sind. Diese Ereignisse können unabhängig davon sein, wie der Code geschrieben wird, wobei ein Fehler im Wesentlichen auf einen fehlerhaften Code zurückzuführen ist (z. B. auf eine falsche Berechnung).
Hier ist ein Beispiel, wie die Nichtbehandlung einer Ausnahme ein Fehler sein kann.
Nehmen wir an, es gibt ein Programm, das Daten auf ein externes Speichergerät schreibt. Während des Schreibens wurde das externe Speichergerät vom Stromnetz getrennt, ist abgestürzt oder kann zerstört werden (aus welchem Grund auch immer). Dies ist ein Ausnahmefall. Unabhängig davon, ob die Programmiersprache eine außergewöhnliche Behandlung unterstützt oder nicht, ob das Programm aufgrund dieses Ereignisses abstürzt oder sich nicht richtig verhält, handelt es sich um einen Fehler. . Wenn das Programm den Vorgang jedoch ordnungsgemäß abbricht, benachrichtigen Sie den Benutzer (mit anderen Worten, behandeln Sie die Ausnahme), ist dies eindeutig kein Fehler.
Die Try-Catch-Machanism-Programmiersprachen sind im Wesentlichen ein Werkzeug, um uns den Weg zur Bewältigung unerwarteter Ereignisse zu erleichtern.
quelle
Synopsis : Ausnahmen sind Anzeichen für schlechte Ergebnisse, Fehler sind (einige der) Ursachen für schlechte Ergebnisse. Das zu lösende Problem ist nicht die Ausnahme, sondern die Ursache der Ausnahme.
Resonanz: Ein Fehler ist ein Fehler im Design oder in der Implementierung eines Produkts (nicht auf Software beschränkt). Verwenden Sie zum Beispiel kein Relais mit korrekter Nennleistung (Zeit / Empfindlichkeit / Zuverlässigkeit / Kapazität), weil die technischen Daten nicht korrekt sind oder ein einfacher Fehler vorliegt. Eine Ausnahme ist eine Abweichung der realen Welt / Laufzeit vom vorhergesagten (wage ich zu sagen "erwartet"?) Verhalten, z. B. der Verlust der Kontrolle über ein Fahrzeug während der Fahrt.
Offensichtlich kann ein Fehler eine Ausnahme verursachen, da das Beispiel in 1) zu dem Beispiel in 2) führen könnte. Aber nicht alle Ausnahmen würden durch Fehler verursacht, z. B. den Verlust der Kontrolle über ein Fahrzeug, weil der Bediener einen Schlaganfall hatte.
quelle
Da diese Frage für ein Kopfgeld wieder geöffnet wurde, möchte ich meinen CUJ-Artikel aus dem Jahr 2003 mit dem Titel "Eine Ausnahme oder ein Bug?" Erwähnen, der genau die Frage des OP zu beantworten scheint.
Grundsätzlich werden in dem Artikel die Begriffe "Fehler" und "Ausnahme" (mit Beispielen) definiert und Strategien für den Umgang mit diesen vorgeschlagen.
Der Artikel schlägt vor, Fehler nicht zu "behandeln", sondern mit Behauptungen zu kennzeichnen. Im Gegensatz dazu erfordern echte Ausnahmen die Behandlung durch Code (möglicherweise das Auslösen / Abfangen von Ausnahmen).
Der wichtigste Punkt ist, dass Fehler die genau entgegengesetzte Strategie als Ausnahmen erfordern .
Der oben genannte Artikel ist ab sofort bei Dr.Dobb unter folgender Adresse erhältlich: http://www.drdobbs.com/an-exception-or-a-bug/184401686
quelle