AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Möglichkeit: Try ... Except ... Finally ?

Ein Thema von LuCSteR · begonnen am 22. Aug 2008 · letzter Beitrag vom 23. Aug 2008
Antwort Antwort
Seite 3 von 3     123   
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: Möglichkeit: Try ... Except ... Finally ?

  Alt 22. Aug 2008, 15:08
Hi Bbommel,

bei solchen Konstrukten würde der Code nicht mehr gehen

Delphi-Quellcode:
begin
  SomeOne := TSomeone.Create;
  try
    try
      doSomething;
       ...
      ...
    except
      Bam;
      Exit;
    end;
  finally
    SomeOne.Free;
  end;
  
  
  UndhierNochwasmachenwennnichtbeendetwurde;
  UndNochwas;
  ...
end;
Ansgar
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Möglichkeit: Try ... Except ... Finally ?

  Alt 22. Aug 2008, 15:13
ich glaub ganz richtig wäre es so:
Delphi-Quellcode:
try
  try
    [...]
  except
    raise;
  end;
finally
  [...]
end;
[...]
Dann sollte das hinter finally nur ausgeführt werden wenn keine exception geworfen wurde.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#23

Re: Möglichkeit: Try ... Except ... Finally ?

  Alt 22. Aug 2008, 15:13
Ah, okay... das finally wird also dann auch trotz des "exit" noch ausgeführt? Okay, wieder was gelernt... bisher wollte ich zum Glück das Gegenteil (also, dass er eben sehr wohl weitermacht), sonst müsste ich mich jetzt Ärgern, dass ich ein Feature nicht kannte. Danke für die Erklärung.

Bis denn
Bommel
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#24

Re: Möglichkeit: Try ... Except ... Finally ?

  Alt 22. Aug 2008, 16:09
Dein "puh" wird nicht nur nicht ausgeführt, wenn du eine neue Exception wirfst; es genügt, wenn du auf spezielle Exceptions reagierst (on E: EWhatever do). Dann werden andere Exceptions nämlich durchgereicht und dein "puh" kommt nicht zum Zuge.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#25

Re: Möglichkeit: Try ... Except ... Finally ?

  Alt 22. Aug 2008, 18:35
Hi,

Zitat von Apollonius:
Dein "puh" wird nicht nur nicht ausgeführt, wenn du eine neue Exception wirfst; es genügt, wenn du auf spezielle Exceptions reagierst (on E: EWhatever do). Dann werden andere Exceptions nämlich durchgereicht und dein "puh" kommt nicht zum Zuge.
Und genau das sollte man immer machen. Sonst verliert beispielsweise Abort die Wirkung, oder man merkt gar nicht, dass man eine ganz andere Meldung anzeigt als zu der aufgetretenen Exception passt.

Delphi-Quellcode:
try
  StringList.Add(StrToInt(Edit.Text)); //Bei Add --> z. B. EOutOfResources
except
  ShowMessage('Bitte Zahl eingeben!');
end;
Der Benutzer fragt sich nun, warum das keine Zahl war.

Delphi-Quellcode:
try
  Abort;
except
  foo;
end;
bar;
Hier werden trotz Abort foo und bar aufgerufen - und eventuell noch ganz andere Vorgänge ausgeführt, die eigentlich Abgebrochen werden sollten.

Etwas anderes ist es, wenn man raise; dazu schreibt.

Delphi-Quellcode:
function CreateBitmapFromFile(const FileName: String): TBitmap;
begin
  Result := TBitmap.Create;
  try
    Result.LoadFromFile(FileName);
  except
    Result.Free;
    raise;
  end;
end;
Mfg
FAlter
Felix Alter
Japanurlaub 2015
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#26

Re: Möglichkeit: Try ... Except ... Finally ?

  Alt 22. Aug 2008, 22:28
Dieser Thread erinnert mich gerade an ein Problem, welches ich einmal mit Except+Finally hatte.

Ich habe mich entschlossen, den except-block innerhalb des finally-blocks zu machen: try-try-except-finally-end. In diesem Falle würde die Aufräumprozedur (vorzugsweise mit einem if Assign() vor dem .Free) immer noch stattfinden. Doch was wäre, wenn im Finally auch noch eine Exception ausgelöst wird?

Und ich frage mich, ob es überhaupt (in irgend einer Situation) Sinn macht, die Reihenfolge mal zu verdrehen: try-try-finally-except-end . Oder ist das vielleicht sogar egal?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#27

Re: Möglichkeit: Try ... Except ... Finally ?

  Alt 23. Aug 2008, 09:14
Ein Except-Block wird nur im Fehlerfall angesprungen, ein Finally-Block immer. Das heißt in logischer Konsequenz, dass Fehlerbehandlungsroutinen in einen Except-Block gehören, Aufräumarbeiten hingegen in einen Finally-Block.
Delphi-Quellcode:
Bla := TBla.Create;
try
  try
    Bla.Machwas;
  except
    on EWuppdi do
      MessageBox(0,'Es ist ein Wuppdi aufgetreten.','Fehler',MB_OK or MB_ICONERROR);
  end;
finally
  Bla.Free;
end;
So könnte das aussehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#28

Re: Möglichkeit: Try ... Except ... Finally ?

  Alt 23. Aug 2008, 09:19
Zitat von DeddyH:
on EWuppdi do
MessageBox(0,'Es ist ein Wuppdi aufgetreten.','Fehler',MB_OK or MB_ICONERROR);
[/delphi]
Hi,

ein Wuppdi ist doch kein Fehler! Eine so hohes Wuppdi-Level wie in der DP ist eine Ausnahme (Exception), aber nicht jede Ausnahme muss ein Fehler sein. Ein hohes Wuppdi-Level ist im Gegenteil richtig toll!

Mfg
FAlter
Felix Alter
Japanurlaub 2015
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#29

Re: Möglichkeit: Try ... Except ... Finally ?

  Alt 23. Aug 2008, 12:37
Zitat von DeddyH:
Ein Except-Block wird nur im Fehlerfall angesprungen, ein Finally-Block immer. Das heißt in logischer Konsequenz, dass Fehlerbehandlungsroutinen in einen Except-Block gehören, Aufräumarbeiten hingegen in einen Finally-Block.
Ja, ist mir bekannt.

Ich frage mich aber, ob es überhaupt irgendeinen Sinn hat, das ganze so zu schreiben (andersherum zu verschachteln):

Delphi-Quellcode:
try
  Bla := TBla.Create;
  try
    Bla.MachWas();
  finally
    Bla.free;
  end;
except
  showmessage('Blubb');
end;
Wäre das dann ein grober Fehler oder allgemein Problematisch?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#30

Re: Möglichkeit: Try ... Except ... Finally ?

  Alt 23. Aug 2008, 12:56
Je nach Anwendungsfall kann diese Reihenfolge doch durchaus logisch sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 13:23 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