Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 26.11.02 18:47 
Hi,

grade beim Dateihandling kann man auch das gute alte IORESULT noch mit ins Boot holen.
Wollte ich nur mal erwähnt haben ;).

Gruß
Klabautermann
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: Mi 27.11.02 15:32 
Hi Leute,

ich muss denen entschieden wiedersprechen, die behaupten try... except sei ein unsauber Programmierstil. Man muss es nur richtig anwenden. Dagegen halte ich es für sehr bedenklich, Fehlermeldungen im Quellcode zudefinieren. Spätestens wenn ihr ein grösseres Projekt lokalisieren wollt wird das zu hohem Aufwand führen. Mit try..except lässt sich das schnell und einfach umgehen.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
begin
-Pack das in eine Unit
var IntroStr:string='Es ist ein Fehler aufgetreten:';

procedure MyExceptionHandler(e: Exception;Pos:string);
  if E is EZeroDivide then
    ShowMessage(IntroStr+#10#13+'EZeroDivide: '+E.Message+#10#13+Pos);
  if E is EOverflow then
    ShowMessage(IntroStr+#10#13+'EOverflow: '+E.Message+#10#13+Pos);
    .......
end;

- und so wirds im Programm aufgerufen

procedure TForm1.Button1Click(Sender: TObject);
var i:double;
    q:integer;
begin
  for q:=5 downto -3 do begin
    try
      i:=1/q;
    except
      on E: Exception do MyExceptionHandler(e,'Button1Click, q='+IntToStr(q));
    end;
    If i>1 then ... ;
  end;
end;


So sagen deine Fehlermeldungen genau WELCHER Fehler WANN WO aufgetreten ist. Die String können ja noch in eine Datei verbannt werden.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mi 27.11.02 16:40 
Du meine Güte, irgendwie dreht sich hier alles im Kreise!

Fassen wir es zusammen:

a)
Try/Except hat seinen Platz in der Programmierung. Es ist unerlässlich, um eine ordentliche Fehlerbehandlung in Programmen durchzuführen.

b)
Try/Except sollte allerdings nicht missbraucht werden, um bestimmte Eigenschaften abzuprüfen (siehe das Bsp mit try...StrToInt...except), indem man es darauf ankommen lässt, ob es eine Exception gibt, da man sonst eben beim Debuggen mit Exceptions zugepflastert wird, die man geflissentlich ignorieren kann, da es keine Fehler in dem Sinne sind.

Nochmal:
Try Except / Finally wird benutzt, um vor Fehlern sicher zu sein (z.B. EFileNotFound etc.). Keinesfalls soll man aber Exceptions provozieren wie in der "Ist das ein Integer?"-Prüfung.

Cu,
Udontknow