AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler in eigenen Komponenten "behandeln"

Ein Thema von scrat1979 · begonnen am 20. Dez 2016 · letzter Beitrag vom 22. Dez 2016
 
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Fehler in eigenen Komponenten "behandeln"

  Alt 20. Dez 2016, 22:04
Und warum hier ein try...except-Block (keine Kritik sondern ich möchte es verstehen )???
Naja, habe hat keine Ahnung wie komplex Dein konkretes Problem ist, daher mal prophylaktisch mit eingebaut.

Try Except gibt es bei mir immer, wenn ich nicht absolut ausschließen kann, dass irgendwas passiert, womit ich nicht rechne.
Try finally immer, wenn es sonst passieren könnte, dass irgendwas nicht freigegeben wird.

Ok: Konkret mehr als True bzw. False.
Funktion bekommt noch 'nen weiteren var-Parameter, in den Du die Fehlermeldung schreibst. Ist der Rückgabewert false, muss der Programmierer, der die Funktion nutzt, diesen auswerten und entsprechend reagieren.

Oder wie hoika schreibt: Eigene Exception definieren.

Ohne Garantie für irgendwas (nur hingedaddelt):
Delphi-Quellcode:
type
  EUserIDKleiner0 = class(Exception);
  EUserIDExistiertNicht = class(Exception);
  EUserIDNichtOnline = class(Exception);
  EUserIDSonstigerFehler = class(Exception);

...

function SendText(const UserID : Integer; Text: String) : Boolean;
begin
  Result := false;
  if UserID < 0 then begin
    raise EUserIDKleiner0.CreateFmt('Die Userid %d ist kleiner als 0.',[UserID]);
  end else
  if not UserIDExists(UserID) then begin
    raise EUserIDExistiertNicht.CreateFmt('Die UserID %d existiert nicht.',[UserID]);
  end else
  if not UserIDIstOnline(UserID) then begin
    EUserIDNichtOnline.CreateFmt('User mit UserID %d ist nicht online.',[UserID]);
  end else begin
  try
    // Machen, was zu tun ist ...
    Result := True;
  except
    on e : Exception do begin
      // und weitere Fehlerbehandlung.
      // ggfls. Raise ...
      Raise EUserIDSonstigerFehler.CreateFmt('%s zu UserID %d',[e.Message,UserID]);
    end;
  end;
end;

...
// irgendwelcher Quelltext, der die Funktion nutzt.
begin
  try
    if SendText(47, 'Text') then begin
      // Erfolgsmeldung ...
    end else begin
      // Fehler, der nicht explizit in der Funktion behandelt wurde...
    end;
  except
    on e : EUserIDKleiner0 do begin
      // Einfachstes
      MessageDlg(e.Message,mtError,[mbOk],0);
      // Oder beliebige andere Fehlerbehandlung.
    end;
    on e : EUserIDExistiertNicht do begin
      ...
    end;
    on e : EUserIDNichtOnline do begin
      ...
    end;
    on e : EUserIDSonstigerFehler do begin
      ...
    end;
    on e : Exception do begin
      MessageDlg(e.Message,mtError,[mbOk],0);
    end;
  end;
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 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-2025 by Thomas Breitkreuz