![]() |
Bubblen Exceptions nach oben durch einen try-finally-Block?
Hallo, folgende Struktur:
Delphi-Quellcode:
Ich will eine Fehler bei der Erstellung der Klasse abfangen - innerhalb des try...finally-blocks interessieren mich keine Exceptions.
try
with TSomeClass.Create do try SomeMethod; SomeMethodThatThrows; //wirft Exception! finally Free; end; except on E:Exception do ShowmEssage(E.Message); end; Klappt das oder kommt die Exception, die ich oben markiert hab, aus dem try...finally-block irgendwie raus? |
Re: Bubblen Exception nach oben durch einen try-finally-Bloc
Delphi-Quellcode:
So würd ich das machen.
with TSomeClass.Create do
try SomeMethod; SomeMethodThatThrows; //wirft Exception! except on E:Exception do ShowmEssage(E.Message); end; Free; |
Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
Es dürfte kein Exception außerhalb des Blocks entstehen.
|
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. |
Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
Das hättest du auch dazusagen können.
|
Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
Hab ich.
Zitat:
|
Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
Hallo DGL-luke,
man könnte dies z.B. so machen:
Delphi-Quellcode:
Gruß :???:
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; PaulJr. |
Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
Zitat:
|
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.
|
Re: Bubblen Exceptions nach oben durch einen try-finally-Blo
Das funktioniert:
Delphi-Quellcode:
Ich habe keine Schreibrechte auf c:\ und als Nachricht wird foobar aisgegeben.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz