Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi finally: if "exception exists" then ... else ... Ist das möglich? (https://www.delphipraxis.net/162703-finally-if-exception-exists-then-else-ist-das-moeglich.html)

himitsu 2. Sep 2011 11:06

AW: finally: if "exception exists" then ... else ... Ist das möglich?
 
jain ... dafür ist eigentlich der Except-Block zuständig,

aber (nicht schön, aber gehn)
Delphi-Quellcode:
EinFehler := True;
try

  ...
 
  EinFehler := False;
finally

  if EinFehler then ...

end;
ansonsten
Delphi-Quellcode:
try
  ...
except
  ...
  raise; // erneut auslösen
end;
Delphi-Quellcode:
try
  ...
except
  on E: Exception do begin
    ...
    E.Message := 'Fehler: ' + E.Message; //  eventuell die Meldung erweitern
    ...
    raise; // erneut auslösen
  end;
end;
Delphi-Quellcode:
try
  ...
except
  on E: Exception do begin
    ...
    raise Exception.Create(...); // andere Exception auslösen
  end;
end;

und dann noch verschachtelt
Delphi-Quellcode:
try
  X := TIrgendwas.Create;
  try
    ...
  finally
    X.Free; // erst aufräumen, dann Exception behandeln
  end;
except
  ...
end;
Delphi-Quellcode:
X := TIrgendwas.Create;
try
  try
    ...
  except
    ...
  end;
finally
  X.Free; // erst Exception behandeln, dann aufräumen
end;
Delphi-Quellcode:
X := nil;
try
  X := TIrgendwas.Create; // Fehler beim Erstellen ebenfalls mit behandeln
  try
    ...
  except
    ...
  end;
finally
  X.Free; // erst Exception behandeln, dann aufräumen
end;

SirThornberry 2. Sep 2011 17:03

AW: finally: if "exception exists" then ... else ... Ist das möglich?
 
Zitat:

Delphi-Quellcode:
X := TIrgendwas.Create;
try
   try
     ...
   except
     ...
   end;
finally
   X.Free; // erst Exception behandeln, dann aufräumen
end;
Delphi-Quellcode:
try
   X := TIrgendwas.Create;
   try
     ...
   finally
     X.Free; // erst aufräumen, dann Exception behandeln
   end;
except
   ...
end;

Hast du deine Varianten auch mal ausprobiert?
Das war doch schon letztens der Fall, dass du etwas gepostet hast was durch einfaches probieren zu widerlegen war.

Wenn innerhalb eines try-finally eine Exception ausgelöst wird, wird der Code hinter dem Block nicht mehr ausgeführt.
Bei einem Fehler innerhalb eines try-Except wird jedoch der Code hinter dem Block noch ausgeführt.

Wenn du jetzt innerhalb des Try-Finally ein Try-Except machst wird der Fehler im Except-Block behandelt und es geht auch nach dem Finally weiter. Wenn dann müsste man im Except-Block die Exception erneut auslösen damit der Code hinter dem Finally-Block nicht mehr ausgeführt wird.

himitsu 2. Sep 2011 18:32

AW: finally: if "exception exists" then ... else ... Ist das möglich?
 
Innerhalb des ersten TRY/Create und des letzten END funktioniert es genau so, wie beschrieben,
also ja .... ich hab's mehrfach erfolgreich in Verwendung.

Fremdcode darf aber nur an den gepunkteten Stellen vorhanden sein, sonst mirgendwo.
Code vor dem ersten TRY/Create und nach dem letzten END ist hierbei irrelevant.


Ob nun Code nach dem letzen END ausgeführt wird, hängt von der Exceptionbehandlung ab.

* wird der Fehler abgefangen, dann wird nachfolgender Code natürlich ausgeführt (genauso, wie bei einem unverschachtelten Try-Except)

* wird die Exception nach der Fehlerbehandlung erneut ausgelöst (raise), dann wird nachfolgender Code nicht mehr ausgeführt (es sei denn er steht auch in einem Finally-Block)

RSE 5. Sep 2011 11:16

AW: finally: if "exception exists" then ... else ... Ist das möglich?
 
Frage war für mich erledigt, dachte das "Offene Frage" auch weggeklickt zu haben. Nun ist wohl ein neuer Post die einzige Lösung, um das Flag entfernen zu können...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 Uhr.
Seite 2 von 2     12   

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