WikiDer > Ausnahmebehandlung
Ausnahmebehandlung ist eine Struktur oder ein Mechanismus, der Programmiersprache bietet an, auf ein anormales oder außergewöhnliches Ereignis zu reagieren (Ausnahmen), um während der Ausführung (Laufzeit) von Software. Der normale Programmablauf wird in eine vorübergehende Unterbrechung oder eine vollständige Unterbrechung geändert. Wenn die mögliche Ausnahme im Programm nicht beachtet wurde, meldet das System eine "unerwartete Ausnahme", in der Regel gefolgt von einer Meldung.
Beispiele für Ausnahmen
Ausnahmen können unter anderem auftreten bei:
- Lese- oder Schreibfehler bei Eingabe-/Ausgabe-Peripheriegeräten;
- beim Schreiben in oder Lesen aus einem Speicher, der nicht für das Programm bestimmt ist;
- bei Division durch Null;
- eine Art von Überlauf;
- Ausnahmen vom Softwareentwickler.
Viele Programmiersprachen geben die Programmierer die Möglichkeit, eigene Ausnahmen zu definieren.
Die exemplarischste Ausnahme ist die arithmetische Division durch die Zahl 0. Es ist im Programm fast unmöglich, bei jeder Division den Divisor auf den Wert 0 zu prüfen, und die Anzahl der Male, die der Programmierer dies tun müsste, steht in keinem Verhältnis zur kleinen Zahl manchmal passiert dies tatsächlich. Daher bietet der Ausnahmemechanismus die Möglichkeit, diesen Fehler zentral zu behandeln, in der Regel so, dass die Verarbeitung minimal gestört wird.
Zweck der Ausnahmen
Ausnahmen sollen dem Programmierer einen praktischen Mechanismus geben, um mit Fehler- und Ausnahmesituationen umzugehen, die in Software auftreten können. Auf diese Weise können Fehler, die auf einer niedrigeren Ebene verursacht werden, auf einer höheren Ebene abgefangen werden, ohne dass auf einer Zwischenebene spezieller Code hinzugefügt werden muss.
Operation
Der Schlüssel zur Ausnahmekonstruktion in einer Programmiersprache besteht darin, Anweisungen in Blöcke zu gruppieren, wie dies in der strukturierte Programmierung. Ein Codeblock wird markiert, um eine Ausnahme behandeln zu können, und er wird außerdem um einen Teil erweitert, der die Ausnahme behandelt, den sogenannten Ausnahmebehandler. Blöcke können verschachtelt werden und daher muss der (innere) Block, in dem die Ausnahme auftritt, keinen Handler haben. Solange die Ausnahme nicht behandelt wird, sucht der Mechanismus von innen nach außen nach dem Block, den der vorherige Block an einem geeigneten Handler aufgerufen hat. Währenddessen wird die weitere Ausführung in den Blöcken, in denen kein passender Handler gefunden wurde, zwangsweise abgebrochen und die Variablen gehen verloren. Schließlich findet der Mechanismus einen Block mit einem Handler und führt den Code im Handler-Teil aus. Das Auffinden eines Handlers ist garantiert, da das System, das das Programm startet, sozusagen der äußerste umschließende Block mit gemeinsamen Handlern ist. Diese Handler für "unerwartete Ausnahmen" sind jedoch nicht für einen Endbenutzer gedacht und brechen das Programm vollständig ab.
Außergewöhnliche Robustheit
Aus einer Software wird Ausnahme sicher (Ausnahme sicher) wenn Laufzeitfehler innerhalb des Codes nicht zu führen Speicherlecks, beschädigte Daten oder falsche Ausgabe. Es gibt eine Reihe von Sicherheitsstufen für Ausnahmen:
- Fehlertransparent (am besten): alle Schritte des Programms sind immer erfolgreich und erfüllen alle Anforderungen, auch in Ausnahmesituationen;
- Aufnahme- oder Rollback-Technik: einige Schritte des Programms können fehlen, aber die fehlenden Schritte haben keine Nebenwirkungen;
- Grundlegende Ausnahmesicherheit: die fehlenden Schritte können Nebenwirkungen verursachen, aber der korrekte Zustand wird beibehalten (damit alle gespeicherten Informationen korrekt sind);
- Minimale Ausnahmesicherheit: eine teilweise Ausführung des Programms kann zu falschen Daten führen, wird aber nicht Absturz Ursache;
- Keine Ausnahme Sicherheit (am schlimmsten): Das Programm hat keine richtige Handhabung und stürzt mit benutzerunfreundlichen Systemmeldungen ab.
Normalerweise ist eine grundlegende Ausnahmesicherheit erforderlich. Fehlertransparenz ist schwierig, wenn nicht gar nicht umsetzbar.
Ausnahmeunterstützung in Programmiersprachen
Viele Programmiersprachen, die blockstrukturiert sind, wie zum Beispiel: Ada, C#, C , Gemeinsame Lisp, d, Delphi, Eiffel, Java, Ziel c, PHP, PL/SQL, Python, Reichweite, haben Unterstützung für Ausnahmen und Ausnahmebehandlung. In diesen Sprachen wird beim Auftreten einer Ausnahme die Stapel von Funktionsaufrufen umschlossen, bis ein Ausnahmehandler für diese Ausnahme gefunden wird.
ActionScript 3
Versuchen{// Code, der eine Ausnahme auslösen kann}Fang(e:Error){//Behandeln einer Systemausnahme.}schließlich{// (optional) Code, der immer uitgevoerd ausführt}C#
ÖffentlichkeitstatischLeereMain(){Versuchen{// Code, der eine Ausnahme auslösen kann}Fang(System.Ausnahme){//Behandeln einer Systemausnahme.}Fang{//Behandeln Sie eine weitere Ausnahme.}schließlich{// (optional) Code, der immer ausgeführt wird}}C
#einschließen<exception>intMain(){Versuchen{// Code, der eine Ausnahme auslösen kann}Fang(conststd::Ausnahme&e){//Eine Standardausnahme behandeln.}Fang(...){// unbekannte Ausnahme}}Delphi
VersuchenVersuchen// Code, der eine Ausnahme auslösen kannschließlich// Code, der unabhängig davon ausgeführt wird, ob eine Ausnahme ausgelöst wirdEnde;außeraufE:Ausnahmetun//Eine Ausnahme verarbeitenEnde;Java
Versuchen{// Code, der eine Ausnahme auslösen kann}Fang(BeispielAusnahmeee){//Eine Beispielausnahme behandeln}Fang(Ausnahmeb){// Behandeln Sie die anderen Ausnahmen}schließlich{// (optional) Code, der immer uitgevoerd ausführt}PHP
Versuchen{// Code, der eine Ausnahme auslösen kann}Fang(Ausnahmeklasse$Ausnahme){//Eine ExceptionClass-Ausnahme behandeln}Python
Versuchen://CodeDaseinAusnahmeaufkönnenzustellenaußerAusnahme1://CodeDashingerichtetMusseinbiegen inwannAusnahme1tritt ein//Optional:außerAusnahme2://CodeDashingerichtetMusseinbiegen inwannAusnahme2tritt einsonst://CodeDashingerichtetMusseinbiegen inwannNeinvondasBisherigeAusnahmenseinaufgetretenschließlich://CodeDasimmerhingerichtetMusseinbiegen inEgal oboderDorteinAusnahmeistaufgetretenPowerBuilder
VERSUCHEN// Code, der eine Ausnahme auslösen kannFANG(n_exc_myExceptionle_myException){//Handhabe die Ausnahme vom Typ n_exc_myexceptionFANG(Ausnahmele_ausnahme){// Behandeln Sie die anderen AusnahmenSCHLIESSLICH// (optional) Code, der immer vor dem Code nach der END TRY-Anweisung ausgeführt wirdENDEVERSUCHEN