Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Nur bestimmte exceptions abfangen/ignorieren (https://www.delphipraxis.net/205001-nur-bestimmte-exceptions-abfangen-ignorieren.html)

kagi3624 22. Jul 2020 11:07

Delphi-Version: 6

Nur bestimmte exceptions abfangen/ignorieren
 
Hallo, ich möchte eine bestimmte Exception abfangen bzw. ignorieren. Gibt es irgendeinen Befehl ähnlich zu continue oder so, dass mein Programm dann einfach weitermacht?

Code:
  try
   blablub(iwas);
  except
   On E : Exception do
    if (E.ClassName = 'EIBInterBaseError') then
        -> ignorieren ??
    else
      raise Exception.Create(E.Message);
  end;

DeddyH 22. Jul 2020 11:32

AW: Nur bestimmte exceptions abfangen/ignorieren
 
Delphi-Quellcode:
try
  MachWas;
except
  on E: EIrgendwasException do
    BehandleEIrgendwasException;
  on E: EWasAnderesException do
    BehandleEWasAnderesAxception;
  on E: Exception do
    BehandleAnderenExceptionTyp;
end;

kagi3624 22. Jul 2020 11:38

AW: Nur bestimmte exceptions abfangen/ignorieren
 
Ja, ich kann aber keine Exceptions ignorieren, habe ich grade erfahren. Wäre ja auch zu schön des guten :cyclops:

Jasocul 22. Jul 2020 12:01

AW: Nur bestimmte exceptions abfangen/ignorieren
 
Wenn man folgendes programmiert:
Code:
  try
   blablub(iwas);
  except
  end;
wird jede Exception ignoriert.

Ohne zu testen gehe ich davon aus, dass dieses Konstrukt dann deine Bedingung erfüllt:
Code:
  try
   blablub(iwas);
  except
   On E : Exception do
    if (E.ClassName <> 'EIBInterBaseError') then
      raise Exception.Create(E.Message);
  end;

DeddyH 22. Jul 2020 12:01

AW: Nur bestimmte exceptions abfangen/ignorieren
 
Wieso?
Delphi-Quellcode:
// Fangen und nicht behandeln
on E: EMirEgalException do;
Ob das ratsam ist, hängt vom Einzelfall ab. In der IDE wird die Exception beim Debuggen trotzdem geworfen.

himitsu 22. Jul 2020 12:30

AW: Nur bestimmte exceptions abfangen/ignorieren
 
Erstens niemals nicht über den Namen vegleichen.
Nachteil ist auch, dass der Name/Typ so nicht vom Compiler geprüft wird.

Delphi-Quellcode:
try
  ...
except
  on E: Exception do
    if E is EIBInterBaseError then
      // nicht machen
    else
      raise;
end;
Delphi-Quellcode:
try
  ...
except
  on E: Exception do
    if not (E is EIBInterBaseError) then
      raise;
end;
oder wie bereits gezeigt
Delphi-Quellcode:
try
  ...
except
  on E: EIBInterBaseError do
    ; // nichts
  on E: Exception do
    raise;
end;
Zitat:

Delphi-Quellcode:
raise Exception.Create(E.Message);

Und wer das macht, wird auch gesteinigt.

Denn rate mal was hier passiert.
Delphi-Quellcode:
try
  try
    raise EIBInterBaseError.Create('peng');
  except
    on E: Exception do
      raise Exception.Create(E.Message); // das Böse, wo der Typ sinnlos vernichtet wird ud Informationen verloren gehen
  end;
except
  on E: EIBInterBaseError do
    ShowMessage('juhu');
  on E: Exception do
    raise Exception.Create('Danke (sarkastisch)'); // oder ShowMessage mit ganz bösem Icon
end;

kagi3624 22. Jul 2020 13:23

AW: Nur bestimmte exceptions abfangen/ignorieren
 
Zitat:

Zitat von himitsu (Beitrag 1470093)
Erstens niemals nicht über den Namen vegleichen.
Nachteil ist auch, dass der Name/Typ so nicht vom Compiler geprüft wird.

Delphi-Quellcode:
try
  ...
except
  on E: Exception do
    if E is EIBInterBaseError then
      // nicht machen
    else
      raise;
end;
Delphi-Quellcode:
try
  ...
except
  on E: Exception do
    if not (E is EIBInterBaseError) then
      raise;
end;
oder wie bereits gezeigt
Delphi-Quellcode:
try
  ...
except
  on E: EIBInterBaseError do
    ; // nichts
  on E: Exception do
    raise;
end;

Ja, wäre schön, wenn Delphi 6 das könnte. Ich bekomme *dies und das ist unbekannt, das und dies kannste aber nich machen hier* wenn ich es so mache, ich glaube um einen Vergleich über namen komme ich nicht umher, aber das einfache raise; geht!

DeddyH 22. Jul 2020 13:41

AW: Nur bestimmte exceptions abfangen/ignorieren
 
Nenn doch mal die genauen Fehlermeldungen, wahrscheinlich musst Du nur weitere Units einbinden.

kagi3624 22. Jul 2020 14:02

AW: Nur bestimmte exceptions abfangen/ignorieren
 
Zitat:

Zitat von DeddyH (Beitrag 1470104)
Nenn doch mal die genauen Fehlermeldungen, wahrscheinlich musst Du nur weitere Units einbinden.

bei
Code:
if not (E is EIBInterBaseError) then
[Fehler] bla.pas(442): Undefinierter Bezeichner: 'EIBInterBaseError'

Dalai 22. Jul 2020 14:03

AW: Nur bestimmte exceptions abfangen/ignorieren
 
Also ich hab grad alle drei Varianten im Delphi 5 probiert, und alle lassen sich selbst dort einwandfrei nutzen. Statt EIBInterBaseError hab ich EConvertError eingesetzt, denn es geht ja nur ums Prinzip. Oder anders gesagt: Setze die für deinen Code passenden Exception-Typen ein.

Grüße
Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.
Seite 1 von 2  1 2      

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