vor

Objektorientierte Programmierung mit Object-Pascal

weiter

4.8.3. Kontrollstrukturen - Fehlermeldungen
Ausnahmen TRY EXCEPT

Als eine besondere Form der CASE-OF-Entscheidung kann man die EXEPT-Anweisung mit ON..DO betrachten, mit der man bestimmte vorhersehbare Fehler abfangen kann.

Als Programmierer ist man der Beherrscher - ja eigentlich Schöpfer - einer eigenen Welt. Und deshalb kann man auch einen Ausnahmezustand erklären, wenn man es für zweckmäßig ansieht. Zweckmäßig ist es z. B. dann, wenn der User unvernünftige Eingaben machen könnte oder wenn eine Division durch Null passieren könnte.

Delphi kennt ganze Klassen von Fehlern, die auftreten können. Dazu gehören u. a. EZeroDivide (Division durch Null) und EConvertError (falscher Variablentyp). Tritt solch ein Fehler auf, so bricht Delphi die Programmausführung mit einer Fehlermeldung ab.

Diese Fehlermeldung kann der Programmierer im Interesse des Users abfangen und entscheiden, was passieren soll.

Dazu gibt es in Delphi die Befehle TRY und EXCEPT. Mit TRY wird getestet, ob ein Fehler auftritt. Nach EXCEPT wird festgelegt, was passieren soll, wenn der Fehler aufgetreten ist.

TRY
   Anweisungen
EXCEPT
   Anweisungen zur Fehlerbehebung
END;


Die Anweisungen zur Fehlerbehebung können differenziert nach der Fehlerart mit ON..DO ähnlich wie bei der CASE-Anweisung aufgesplittet werden. Das erkent man gut an folgendem Beispiel:

procedure TForm1.Button1Click(Sender: TObject);

var a, b, c:Real;

begin
   try
    a := StrToFloat(edit1.Text);
    b := StrToFloat(edit2.Text);
    c := a / b;
   except
    on EZeroDivide do
     begin
     ShowMessage(' b darf nicht Null sein!');
     edit1.text := '1';
     edit2.text := '1';
     c := 1;
     end;
    on EConvertError do
     begin
     ShowMessage(' Mindestens eine Eingabe ist keine Zahl!');
     edit1.text := '1';
     edit2.text := '1';
     c := 1;
     end;
    else
     begin
     ShowMessage('Fehler!');
     edit1.text := '1';
     edit2.text := '1';
     c := 1;
     end;
   end;

   Label4.Caption := FloatToStr(c);
end;


vor

Inhaltsverzeichnis

weiter