Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bubblen Exceptions nach oben durch einen try-finally-Block? (https://www.delphipraxis.net/86262-bubblen-exceptions-nach-oben-durch-einen-try-finally-block.html)

DGL-luke 11. Feb 2007 21:07


Bubblen Exceptions nach oben durch einen try-finally-Block?
 
Hallo, folgende Struktur:

Delphi-Quellcode:
try
  with TSomeClass.Create do
    try
      SomeMethod;
      SomeMethodThatThrows; //wirft Exception!
    finally
      Free;
    end;
except
  on E:Exception do
    ShowmEssage(E.Message);
end;
Ich will eine Fehler bei der Erstellung der Klasse abfangen - innerhalb des try...finally-blocks interessieren mich keine Exceptions.

Klappt das oder kommt die Exception, die ich oben markiert hab, aus dem try...finally-block irgendwie raus?

3_of_8 11. Feb 2007 21:12

Re: Bubblen Exception nach oben durch einen try-finally-Bloc
 
Delphi-Quellcode:
with TSomeClass.Create do
try
  SomeMethod;
  SomeMethodThatThrows; //wirft Exception!
except
  on E:Exception do
    ShowmEssage(E.Message);
end;
Free;
So würd ich das machen.

mkinzler 11. Feb 2007 21:14

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
 
Es dürfte kein Exception außerhalb des Blocks entstehen.

DGL-luke 11. Feb 2007 21:15

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
 
Negatori.

Ich will es abfangen, wenn die Klasse beim Erzeugen wirft. Im Konkreten geht es um einen Filestream.

@mkinzler: Ja, glaube das reicht mir.

3_of_8 11. Feb 2007 21:17

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
 
Das hättest du auch dazusagen können.

DGL-luke 11. Feb 2007 21:25

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
 
Hab ich.
Zitat:

Zitat von DGL-luke
Ich will eine Fehler bei der Erstellung der Klasse abfangen

Und es ist mir egal, ob du sagst "du hast ja editiert". Ich hab da nur einen Buchstaben im titel geändert. (Kann das einer der Mods vielleicht bestätigen? ka, ob ihr da n versioning habt... :gruebel: )

PaulJr 11. Feb 2007 22:15

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
 
Hallo DGL-luke,

man könnte dies z.B. so machen:
Delphi-Quellcode:
var
  SomeClas : TSomeClas;
Begin

try
  SomeClas := TSomeClas.Create;
 If SomeClas <> NIL then
 with SomeClas do
    try
      SomeMethod;
      SomeMethodThatThrows; //wirft Exception! 
    finally
      Free;
    end;
except
  on E:Exception do
    ShowmEssage(E.Message);
end;

end;
Gruß :???:

PaulJr.

jbg 11. Feb 2007 22:25

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
 
Zitat:

Zitat von PaulJr
SomeClas := TSomeClas.Create;
If SomeClas <> NIL then

Und in welchem Fall würde TSomeClas NIL zurückliefern? - In keinem. Somit ist die if-Anweisung sinnlos.

3_of_8 11. Feb 2007 22:26

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
 
Ich vermute mal, wenn der Konstruktor eine Exception wirft, bleibt der Pointer so, wie er vorher war. Das heißt, wenn man ihn vorher mit nil initialisiert, würde es gehen.

Luckie 11. Feb 2007 22:33

Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
 
Das funktioniert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
begin
  try
  fs := TFileStream.Create('c:\test.txt', fmCreate);
  try

  finally
    FreeAndNil(fs);
  end;
  except
   on E: Exception do
     ShowMessage('foobar');
   end;
end;
Ich habe keine Schreibrechte auf c:\ und als Nachricht wird foobar aisgegeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr.
Seite 1 von 3  1 23      

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