Es gibt Ausnahmen für die Ausnahmebehandlung , mit denen Abstürze vermieden , aber im Allgemeinen unerwünschtes oder unvorhersehbares Systemverhalten verhindert werden kann. Wenn beispielsweise die Verbindung meines Programms zu einer Datenbank aufgrund einer Zeitüberschreitung unterbrochen wird, stürzt das System normalerweise nicht ab. Wenn ich jedoch auf Daten aus der Datenbank angewiesen bin, kann eine Ausnahme es mir ermöglichen, diese datenlose Situation anders als normal zu behandeln.
Angenommen, mein Programm zeigt standardmäßig eine Seite mit Daten an, die auf dem basieren, was von der Datenbank zurückgegeben wurde - also Mist, ich habe keine Daten. Anstatt eine fehlerhafte Ansicht anzuzeigen oder einen möglicherweise ungültigen Vorgang fortzusetzen, kann ich diese Ausnahme abfangen und auf eine andere Datenbank zurückgreifen, aus lokalen Daten lesen, den Benutzer nach Daten fragen oder den Benutzer oder das System auf andere Weise in einen sicheren Zustand zurückversetzen (vermutlich einen das wird nicht gleich die selbe ausnahme verursachen!)
In Systemen, in denen Benutzereingaben die Ursache / Lösung eines Problems sein können, können Ausnahmen dem Benutzer detaillierte und hilfreiche Informationen über das Problem mitteilen. Anstelle der allzu häufigen Meldung "Eine nicht behandelte Ausnahme ist aufgetreten um ..." oder "Einschüchternde Fehlermeldung direkt aus SQL" können Sie dem Benutzer eine hilfreiche oder zumindest verständliche Meldung wie "Konnte keine Verbindung zu Ressource B herstellen" übermitteln.
Ausnahmen wurden erstellt, um die Fehlerbehandlung zu vereinfachen. Ausnahmslos muss die Fehlerbehandlungslogik in einer Anwendung verteilt werden. Jede Funktion, die möglicherweise zu einem Fehler führen kann, muss einen Fehlerstatus zurückgeben, und auf jeden Aufruf muss eine Fehlerprüfung folgen. Oft kann der Anrufer im Fehlerfall nichts Nützliches tun und nur einen Fehler selbst zurückgeben. Die Hälfte des Anwendungscodes kann für die Fehlerbehandlung verwendet werden. Ein solcher Code ist extrem zerbrechlich. Es ist allzu einfach, eine Fehlerüberprüfung auszulassen und einen Absturz oder schlimmer noch, falsche Ergebnisse aufgrund eines unbemerkten Fehlers zu erhalten.
Mit Ausnahmen können Fehler nur an dem Punkt überprüft werden, an dem sie behandelt werden können. Die meisten Anwendungscodes können linear geschrieben werden, da Funktionen entweder einen verwendbaren Wert zurückgeben oder eine Ausnahme auslösen.
quelle
Der Ausnahmefall sollte darin bestehen, den Benutzer über außergewöhnliche Umstände zu informieren. Wenn mit dem System etwas schief geht, sollte das Programm es wissen und in der Lage sein, es angemessen zu behandeln.
Das heißt, nein, es gibt keine Ausnahme, um ein "Abstürzen" des Systems zu verhindern. Eine Ausnahme ist, dass ich weiß, dass ein Problem vorliegt. Wie ich vorgehen soll kann feststellen, ob das System "abstürzt".
Beachten Sie auch, dass eine Ausnahme eine Anwendung nicht beenden muss, wie Sie gesagt haben. Eine Ausnahme kann vom Programmierer behandelt und korrigiert oder in einen für den Benutzer bedeutsamen Fehler umgewandelt werden.
* Die Verwendung von geprüften Ausnahmen (Ausnahmen, die abgefangen werden müssen) ist ein bisschen wund. Einige (vielleicht die meisten) Entwickler finden, dass die erzwungene Ausnahmebehandlung umständlich, unnötig und nur eine schlechte Übung ist.
quelle
Ausnahmen ermöglichen eine moderne Fehlerbehandlung, indem die Fehlerstelle vom Fehlerbehandler getrennt wird. Manchmal wird dies auch zur Flusskontrolle verwendet.
Nicht behandelte Ausnahmen beenden ein Programm. Diese unterscheiden sich jedoch nicht von den vorherigen Ausnahmen. Nur ein fauler Programmierer, der vergessen hat, ordnungsgemäße Fehlerbehandlungsroutinen in jeden Pfad aufzunehmen, macht sie für den Endbenutzer sichtbar. Ich betrachte ein Programm, das ausnahmsweise beendet wurde, als abgestürzt, genau wie jedes andere unerwartete Ende.
Betriebssysteme sind sehr gut darin, abgestürzte Prozesse zu bereinigen, unabhängig davon, wie sie abgestürzt sind. Ausnahmen bieten also keine zusätzliche Sicherheit für das Betriebssystem, als fehlerhafte Prozesse zu beenden und ihre Ressourcen freizugeben.
quelle
Es ist sehr einfach.
Bevor Ausnahmen erfunden wurden, musste jede Funktion einen Exit-Code (Fehler / Erfolg) zurückgeben, und jedes Ergebnis oder jede Ausgabe der Funktion musste durch Übergabe eines Zeigers an den von ihr zu setzenden Speicher abgerufen werden.
Das Problem war, dass sich viele Programmierer nicht daran erinnerten, für jede einzelne Funktion nach fehlerhaften Beendigungscodes zu suchen, und daher wurden manchmal schwerwiegende Fehler ignoriert, was zu völlig unerklärlichen Verhaltensweisen führte.
Daher wurde entschieden - wenn ein Fehler auftritt, den Sie nicht berücksichtigt haben, stürzen Sie sofort ab! AKA-Ausnahmebehandlung.
quelle
Ausnahmen sind lediglich Fehlererkennungsmechanismen. Für sich genommen nützen sie nichts.
Indem sie einen Fehler erkennen, können sie Fehlertoleranzmechanismen auslösen, um den fehlerhaften Zustand durch Umschalten in einen fehlerfreien Zustand (einen vorherigen oder einen neuen Zustand) zu beheben. Auf diese Weise wird der Fehler nicht auf andere Teile des Systems übertragen.
quelle
Es gibt Ausnahmen, um den normalen Programmfluss (was das Programm tun soll) vom Fehlerbehandlungsfluss (wie das Programm versucht, sich von einer Ausnahmesituation zu erholen ) zu trennen .
Dies macht den Code klarer und einfacher zu warten.
Betrachten Sie zwei Code-Sniplets:
Im Vergleich zu diesem:
Natürlich kann die Ausnahmebehandlung verwendet werden, um ein Abstürzen des Programms zu verhindern, indem:
Dies ist jedoch nicht der Grund für die Ausnahmen in modernen Programmiersprachen.
Sie können auch
while
undbreak
anstelle von verwenden,if
aber dies ist nicht das, waswhile
und wofürbreak
.quelle