Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exception spezifizieren bzw. umwandeln (https://www.delphipraxis.net/27924-exception-spezifizieren-bzw-umwandeln.html)

Phoenix 17. Aug 2004 13:32


Exception spezifizieren bzw. umwandeln
 
Hi,

mag sein das das ne doofe Frage ist, aber ich steh grad auf dem Schlauch.
Erstmal ein Beispiel:

Delphi-Quellcode:
type
   EFooException = class(Exception);
   EBarException = class(Exception);

implementation

procedure DoRaiseSomething(foo: boolean);
begin
   if foo then
      raise EFooException.Create('Some-')
   else
      raise EBarException.Create('-thing');
end;
Kann ich nun diese Exceptions die z.B. aus einer Basisklasse kommen in einer abgeleiteten Klasse abfangen und möglicherweise 'übersetzen' bzw. als gleiche Exception aber mit anderem Text weiterraisen? Also im Stil von:

Delphi-Quellcode:
procedure SolveSomething(bar: boolean);
begin
   try
      DoRaiseSomething(bar);
   except
      on EFooException do raise EFooException.Create('Ein Foo-Fehler ist aufgetreten.');
      on EBarException do raise EBarException.Create('Ein Bar-Fehler ist aufhetreten.';
   end;
end;
Geht das, oder bleibt mir die ursprüngliche Exception dann auch bestehen und wird mitgeraised?

Edit: Tippfehler en masse :roll:

nailor 17. Aug 2004 13:33

Re: Exception spezifizieren bzw. umwandeln
 
mach ne try-except schleife, und dann raise ne neue exception

edit: so wie in deinem zweiten code. die ursprüngliche sollte dann tot sein, weil sie in der except-anweisung verarbeitet und erledigt wurde. dass dabei eine neue exception entstand sollte nichts ausmachen.

maximov 18. Aug 2004 10:18

Re: Exception spezifizieren bzw. umwandeln
 
Zitat:

Zitat von Phoenix
...
Kann ich nun diese Exceptions die z.B. aus einer Basisklasse kommen in einer abgeleiteten Klasse abfangen und möglicherweise 'übersetzen' bzw. als gleiche Exception aber mit anderem Text weiterraisen? Also im Stil von:

Delphi-Quellcode:
procedure SolveSomething(bar: boolean);
begin
   try
      DoRaiseSomething(bar);
   except
      on EFooException do raise EFooException.Create('Ein Foo-Fehler ist aufgetreten.');
      on EBarException do raise EBarException.Create('Ein Bar-Fehler ist aufhetreten.';
   end;
end;
Geht das, oder bleibt mir die ursprüngliche Exception dann auch bestehen und wird mitgeraised?

Edit: Tippfehler en masse :roll:

Ja das geht natürlich, wobei in diesem fall sich die klassen der exception nicht ändert und auch kein neues exception-objekt erstellt werden muss. Du kannst die exception aber re-raisen und vorher die message ändern:
Delphi-Quellcode:
   try
      DoRaiseSomething(bar);
   except
      on E:EFooException do
      begin
        E.Message := 'was anderes';  
        raise E;
      end;
     
     ...
   end;
Sonst wär das ja doppelt gemoppelt :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 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