Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.10;
Скачать: 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 вся ветка

Текущий архив: 2002.06.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
1-30874
Dishar
2002-05-28 23:20
2002.06.10
PageControl и TabSheet...


1-30763
Hawk_Skywalker
2002-05-30 15:02
2002.06.10
Мигающая панель, при передаче фокуса на Edit


1-30836
dimich
2002-05-29 09:20
2002.06.10
И обратно про TreeView


6-30936
Andrews
2002-03-27 15:40
2002.06.10
Не могу открыть файл на чтение, из сетевой папки Read Only


6-30956
ввв
2002-04-01 20:18
2002.06.10
mapireadmail