Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Behandlung von Exception in einer Prozedur (https://www.delphipraxis.net/44613-behandlung-von-exception-einer-prozedur.html)

TPok 21. Apr 2005 17:19


Behandlung von Exception in einer Prozedur
 
Hallo,

ich möchte in einer aufgerufenen Prozedur eine eigene Fehlerbehandlung realisieren. Falls ein Fehler auftritt, soll auch der Ablauf der aufrufenden Prozedur abgebrochen werden.

Zur Veranschaulichung mal etwas Beispielcode:

Delphi-Quellcode:
procedure TForm1.MachWas1;
begin
  try
    Memo1.Lines.Add('MachWas1');
                                                // hier würde irgendwas bearbeitet
    raise Exception.Create('');                // dabei tritt eine Exception auf
   except
    Memo1.Lines.Add('FEHLER in MachWas1');     // Fehlerbehandlung
    raise;                                     // erneutes Auslösen, für aufrufende Prozedur
  end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add('Anfang');

  try
(*  try               *)
      Case Auswahl of                           // Wir nehmen mal Auswahl := 1 an
        1: begin
          MachWas1;                             // hier tritt der Fehler auf,
                                                 // eigentlich sollte jetzt abgebrochen und
                                                 // zum finally-Block gesprungen werden
          MachWas2;
          MachWas3;
        end;

        2: begin
          MachWas1;
          MachWas3;
        end;

        [...]

      end;
(*  except
    end               *)
  finally
    Memo1.Lines.Add('Ende');
  end;
end;
Prinzipiell ist der Programmablauf richtig. Das habe ich per Einzelschritt überprüft. Allerdings wird die Exception nicht still verarbeitet, sondern per Messagebox gemeldet. Was eigentlich nicht so sein sollte.
Entferne ich jetzt die (* *) Kommentare, kommt die Messagebox nicht mehr. Das verstehe ich aber nicht. Eigentlich müßte das try..finally.. die Exception doch schon abfangen.

Für Erklärungen und Vorschläge wäre ich sehr dankbar.

Gruß,
Stephan

alcaeus 21. Apr 2005 17:27

Re: Behandlung von Exception in einer Prozedur
 
Falsch. Das try-finally macht genau das was es soll: es fuehrt etwas ganz sicher aus, egal ob ein Fehler auftritt oder mit exit rausgesprungen wird. Zum Behandeln von Exceptions muss immer try-except verwendet werden. Deshalb ist die Kapselung von try-finally und try-except durchaus der richtige Weg.

Greetz
alcaeus

TPok 21. Apr 2005 17:50

Re: Behandlung von Exception in einer Prozedur
 
Ahh. Na klar. Hatte nen Denkfehler. Ist ja logisch.

Danke dir,
Stephan


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz