Programmierkurs: Delphi: Pascal: Exceptions

Aus Wikibooks

Wechseln zu: Navigation, Suche

[Bearbeiten] Exceptions

Exceptions (deutsch: Ausnahmen) sind eventuelle Fehler, die auftreten können. Anfänger sollten wissen, dass man diese Exceptions mit der Konstruktion try-except abfangen kann. Hier stehen noch ein paar weitere, detailliertere Informationen zu Exceptions.

[Bearbeiten] Abfangen von Exceptions

Erst einmal gibt es eine ganze Reihe vordefinierter Exceptions. Die bekanntesten Exception-Typen (jede Exception hat einen Klassentypen) sind wahrscheinlich EMathError, EConvertError und EZeroDivide. Vorallem der letzte tritt häufig auf, wenn man Ergebnisse zum Beispiel bei einem Taschenrechner nicht prüft. EZeroDivide könnte hier auftreten:

 var
  a, b: Integer;
begin
  a := 2;
  b := 0;
  Writeln(a / b);
end;

In der Delphi-IDE kann man zwar Exceptions abschalten, davon wird es jedoch nicht besser. Ein weiteres Beispiel ist der EConvertError, der zum Beispiel auftritt, wenn man bei einer StrToInt eine ungültige Eingabe gemacht hat. Beide diese Exceptions sind bei einem Taschenrechner ziemlich wahrscheinlich. Lösung 1: Alles in einen try-except-Block packen und bei Except eine Writeln mit "Fehler!" ausgeben. Natürlich ginge auch "Division durch 0" oder irgendetwas! Jedoch wollen wir den User auch über seinen Fehler im Detail informieren. Beim Letzteren Beispiel könnte aber auch eine Eingabe falsch sein. Lösung: Exceptions!

try
  Writeln(a / b);
except
  on EZeroDivide do
    Writeln('Fehler: Division durch 0!';
  on EConvertError do
    Writeln('Fehler: Ungueltige Eingabe!';
end;

Damit wäre das Problem gelöst, der User wird über seinen Fehler informiert!

[Bearbeiten] Deklaration

Man kann für eine eigene Klassen auch eigene Exceptions erstellen. Genau genommen sind Exceptions sogar selbst Klassen. Beispiel:

EMyError = class(Exception);

Die Hierarchie würde nun so aussehen:

Exception
   │
   └─── EMyError

Nun wird an einer Stelle (mit if abgefragt) eine Exception ausgelöst:

raise EMyError.Create;

Exceptions sollten immer ausgelöst werden, wo das Programm zusammenbrechen könnte, gerade dann, wenn man eine Klasse weitergeben möchte.


Arrow left.png Pascal: Vererbung Inhaltsverzeichnis Einstieg Arrow right.png
Persönliche Werkzeuge