Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi On exception behandeln (https://www.delphipraxis.net/84214-exception-behandeln.html)

ozz 13. Jan 2007 09:03


On exception behandeln
 
Hallo zusammen,
gibt es eigentlich auch eine Möglichkeit, für das nachfolgende Beispiel auch eine Möglichkeit, mehrere Exceptions zusammenzufassen? Natürlich kann ich eine Procedure oder Funktion angeben.

Delphi-Quellcode:
try
 ...
except
  on EZeroDivide do HandleZeroDivide;
  on EOverflow do HandleOverflow;
  on EMathError do HandleMathError;
else
  HandleAllOthers;
end

veileicht ungefähr so
Delphi-Quellcode:
on EZeroDivide or EOverflow do Handle......;

Der_Unwissende 13. Jan 2007 10:17

Re: On exception behandeln
 
Zitat:

Zitat von ozz
Hallo zusammen,
gibt es eigentlich auch eine Möglichkeit, für das nachfolgende Beispiel auch eine Möglichkeit, mehrere Exceptions zusammenzufassen? Natürlich kann ich eine Procedure oder Funktion angeben.

Eine direkte Möglichkeit gibt es dafür nicht, was aber auch gar nicht so schlecht ist. An sich möchtest du hier gerade verschiedene Fehler erkennen und unterscheiden (solltest diese also auch unterschiedlich abfangen können). Willst du mehr als einen Fehler auf gleiche Weise behandeln, so spricht einiges dafür, dass es sich um die selbe Fehlerklasse (nicht die gleiche Delphi-Klasse!) handelt. Fehlerklassen werden natürlich auch auf Klassen in Delphi abgebildet, hier könntest du also z.B. alle EMathError Exceptions abfangen und behandeln (EZeroDivide und EOverflow sind nur spezielle EMathError).
In einer Behandlung hast du zudem natürlich die Möglichkeit zu schauen, welche Klasse ein Fehler hat:

Delphi-Quellcode:
procedure handleException(e: Exception);
begin
  if (e.ClassType = EZeroDivide) or (e.ClassType = EOverflow) then
  begin
    // ...
  end;
end;
Schöner (eindeutiger) ist es aber trotzdem, wenn du hier wirklich gleichartige Fehler durch eine eigene Methode behandelst, also die Klassenhierachie auch ausnutzt.

Gruß Der Unwissende

Muetze1 13. Jan 2007 19:00

Re: On exception behandeln
 
Warum nicht einfach den Is Operator nutzen? Gibt es einen speziellen Grund?

Delphi-Quellcode:
procedure handleException(e: Exception);
begin
  if ( e Is EZeroDivide) or ( e Is EOverflow) then
  begin
    // ...
  end;
end;


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