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;
|