Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi try..except Gemeinsame Anweisung definieren (https://www.delphipraxis.net/105157-try-except-gemeinsame-anweisung-definieren.html)

Ares 17. Dez 2007 09:49


try..except Gemeinsame Anweisung definieren
 
Hallo!

Ich will in einem try..Except Block gerne verschiedene Exceptions getrennt behandeln und außerdem einige Aktionen ausführen, die bei allen Exceptions notwendig sind. Kann man die gemeinsamen Aktionen in den Except-Block einfügen ohne diese für jede Exception angeben zu müssen?

Delphi-Quellcode:
try
  irgendwas();
except
  TuWasAllgemeines();   // <-- Fehler, wird "on Exception do" verwendet ist dies ungültig.

  on EEinFehler do ...;
  on ENochEinFehler do ...;
Besten Dank
Ares

himitsu 17. Dez 2007 09:54

Re: try..except Gemeinsame Anweisung definieren
 
Das aktuelle Exception-Objekt ist in der Unit System in der Variable ExceptObject gespeichert ... also etwa so:
Delphi-Quellcode:
try
  irgendwas();
except
  TuWasAllgemeines();

  if ExceptObject is EEinFehler then begin
    ...
  end else if ExceptObject is ENochEinFehler then begin
    ...
  end;
end;

Muetze1 17. Dez 2007 10:07

Re: try..except Gemeinsame Anweisung definieren
 
ExceptObject ist nicht reentrant und nicht thread-safe, weshalb es sich innerhalb der If Abfragen verändern kann. Darauf hatte jbg schon einmal hingewiesen, als ich auch mit ExceptObject gearbeitet hatte. Eine bessere Lösung wäre folgende:

Delphi-Quellcode:
try
  irgendwas();
except
  on e: exception do
  begin
    TuWasAllgemeines();   // <-- Fehler, wird "on Exception do" verwendet ist dies ungültig.
   
    if e is EEinFehler then
    begin
      ...;
    end
    else if e is ENochEinFehler then
    begin
      ...;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 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