Entwickler-Ecke

Sonstiges (Delphi) - Exception Trotz Try Except


Herr Bananerama - Fr 21.12.07 19:45
Titel: Exception Trotz Try Except
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


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 - 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 - Fr 21.12.07 19:56

Trotzdem:

Der try-except-Block muss so aufgebaut sein:

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...


dummzeuch - Fr 21.12.07 20:52

user profile iconWolle92 hat folgendes geschrieben:
Trotzdem:

Der try-except-Block muss so aufgebaut sein:

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;




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 - Fr 21.12.07 21:03

das wollte ich mit dem text darunter ausdrücken