Вниз
Скачать: CL | DM;

Исключ. ситуац.   Найти похожие ветки 

 
Kaldr ©   (2002-05-31 11:46) [0]

Помогите разобраться с исключ. ситуациями здесь может возникать деление на ноль или еще что-то вот такая штука не работает:
Case d of
.............

4: try
begin if StrToFloat(Label1.Caption)<>0 then
label1.Caption:=FloatToStr(StrToFloat(f)/StrToFloat(Label1.Caption))
expect EMathError
do ShowMessage("Div Zero");
end;

и что же тут не так??


 
Cossys ©   (2002-05-31 12:00) [1]

1. do ShowMessage("Div Zero"); - do уберите

2. Честно говоря, никогда except на EMathError, EIOError не проверяю, просто пишите -

expect
ShowMessage("Div Zero");
end;

Ведь тут другая ошибка и не проглядывается


 
Freezer ©   (2002-05-31 12:58) [2]

try
{ ... }
except
on E: EMathError do
ShowMessage("Division by zero!")
else
raise
end;


 
Song ©   (2002-05-31 13:01) [3]

Do надо писать если написано on
А при делении на ноль возникает AV вида не EMathError...


 
Anatoly Podgoretsky ©   (2002-05-31 13:04) [4]

Никогда ошибка деления на ноль не наступит

if StrToFloat(Label1.Caption )<>0 then
label1.Caption:=FloatToStr(StrToFloat(f)/StrToFloat(Label1.Caption))


 
Игорь Шевченко ©   (2002-05-31 13:07) [5]

Song © (31.05.02 13:01)

EIntError = class(EExternal);
EDivByZero = class(EIntError);
EZeroDivide = class(EMathError);

:-))


 
Freezer ©   (2002-05-31 13:10) [6]

Согласен с Song, конечно же ошибка другого класса, но смысл вопроса был не в этом... В приведенном коде Kaldr куча синтаксических ошибок! expect -> except, например...

try
{ ... }
except
on E: Exception do
Application.HandleException(E);
end;



 
Anatoly Podgoretsky ©   (2002-05-31 13:27) [7]

А ты не думаешь, что ее не наступит по причине отсутствия самого деления, вообще то этот код одна сплошная ошибка


 
Anatoly Podgoretsky ©   (2002-05-31 13:40) [8]

Kaldr © (31.05.02 11:46)
Вообще если хочешь, что бы это заработало и лучше для всех арифметических ошибок, то можно написать так

4:
try
label1.Caption:=FloatToStr(StrToFloat(f)/StrToFloat(Label1.Caption))
execpt
ShowMessage("Math error");
end;


 
Reindeer Moss Eater   (2002-05-31 14:25) [9]

Кроме перечисленных выше классов может быть еще и
EInvalidOp при делении на ноль


 
Игорь Шевченко ©   (2002-05-31 14:28) [10]

Дабы прекратить дебаты о типах Exceptions

function ForceFixedZeroDivide (K, M : Integer) : INteger;
begin
K := (M DIV 2) - K;
Result := M DIV K;
end;

function ForceFloatZeroDivide (K, M : Extended) : Extended;
begin
K := (M / 2) - K;
Result := M / K;
end;

procedure TForm1.Button1Click(Sender: TObject);
var K : Integer;
M : Integer;
begin
K := 5;
M := K * 2;
ForceFixedZeroDivide (K, M);
end;

procedure TForm1.Button2Click(Sender: TObject);
var K : Extended;
M : Extended;
begin
K := 5;
M := K * 2;
ForceFloatZeroDivide (K, M);
end;

Попробуйте. D5/WinNt


 
Reindeer Moss Eater   (2002-05-31 14:43) [11]

EInvalidOp в этом примере не получится.


 
Игорь Шевченко ©   (2002-05-31 14:54) [12]

Reindeer Moss Eater (31.05.02 14:43)

А в каком получится ? :-)


 
Reindeer Moss Eater   (2002-05-31 15:12) [13]

А получится если разделить целый ноль на целый ноль



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.007 c
6-30963
MMarat
2002-03-28 12:05
2002.06.10
Запись в филе на сервак


14-30998
Alchem
2002-05-04 19:33
2002.06.10
SoftIce 4.0.5


6-30953
alexnsk
2002-04-02 07:56
2002.06.10
Как получить сообщение из почтового ящика


8-30927
KJan
2001-12-30 20:34
2002.06.10
Saving


1-30876
Andrew22
2002-05-29 16:27
2002.06.10
Закрытие проги.




   Наверх