AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi finally: if "exception exists" then ... else ... Ist das möglich?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von RSE · begonnen am 2. Sep 2011 · letzter Beitrag vom 5. Sep 2011
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#11

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

  Alt 2. Sep 2011, 12:06
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;
$2B or not $2B

Geändert von himitsu ( 2. Sep 2011 um 12:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#12

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

  Alt 2. Sep 2011, 18:03
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's

Geändert von SirThornberry ( 2. Sep 2011 um 18:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#13

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

  Alt 2. Sep 2011, 19:32
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)
$2B or not $2B

Geändert von himitsu ( 2. Sep 2011 um 19:35 Uhr)
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#14

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

  Alt 5. Sep 2011, 12:16
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...
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 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