Autor Beitrag
Herr Bananerama
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 130



BeitragVerfasst: Fr 21.12.07 19:45 
Hallo allerseits,
ich muss euch mal wieder mit meinen Fragen nerven ^^ denn ich hab einen für mich total unlogischen Fehler gefunden.

Die Folgende ist eine Prozedur zum errechnen der Nullstellen bei einer Exponentialfunktion. Fa, Fb und Fc sind alle Doubles und in diesem Falle ist Fc 0. Also kommt eine Exception wegen der Division durch null. Aber was ich nicht verstehe ist: ich habe doch try except gemacht!!! Dann müsste doch bei der Exception einfach nur das Except ausgelöst werden. Die Exception trifft auf jeden Fall Bei Folgendem ein, da ich es mit F7 verfolgt habe

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TExF.NS(Var X1: Double; Var Code: Byte);
begin
  try
    X1 := LogN(Fb,(-Fc/Fa)); // Hier tritt eine exception
    Code := 0
  except
    X1 := 0;
    Code := 1
  end
end;


Danke schon mal im voraus
Herr Bananerama Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 130



BeitragVerfasst: Fr 21.12.07 19:56 
Sorry hab den Fehler schon behoben. Die Exception Tritt nicht in der Procedure auf sonder in der von LogN. Ich konnte das nur nicht sehen aber wenn ich drüber nachdenke ist es total logisch

die Frage ist hiermit zurückgezogen.
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Fr 21.12.07 19:56 
Trotzdem:

Der try-except-Block muss so aufgebaut sein:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Irgendwas(irgendwas: String);
begin
  try
    Irgendwas - 0;
  except
    on Exception do ShowMessage('Es ist ein Fehler aufgetreten!');
  end;
end;


Das ist jetzt der grobe Aufbau, du kannst das Exception noch genauer beschreiben, zum Beispiel EDivideByZero (war das glaub ich) oder EConvertError oder sonstwas, was man im entsprechenden Fall eben braucht...
Man kann auch mehrere Befehle in das on Exception do packen, dann braucht man aber begin und end...
du kannst auch mehrere Arten von Exceptions behanden...

_________________
1405006117752879898543142606244511569936384000000000.
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Fr 21.12.07 20:52 
user profile iconWolle92 hat folgendes geschrieben:
Trotzdem:

Der try-except-Block muss so aufgebaut sein:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Irgendwas(irgendwas: String);
begin
  try
    Irgendwas - 0;
  except
    on Exception do ShowMessage('Es ist ein Fehler aufgetreten!');
  end;
end;



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
try
  befehle;
except
  behandlung;
end;


ist durchaus OK, wenn einen der Exception-Typ nicht interessiert, man muss nicht notwendigerweise mit on exceptiontyp do arbeiten. Allerdings kommt das nur selten vor, denn meistens sollte man sich dafuer interessieren, was schiefgelaufen ist, sonst maskiert man mit einer erwarteten Exception evtl. eine unerwartete. Deshalb sollte ein Exception-Handler immer so spezifisch sein wie moeglich.

twm
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Fr 21.12.07 21:03 
das wollte ich mit dem text darunter ausdrücken

_________________
1405006117752879898543142606244511569936384000000000.