Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];
Внизraise Exception Найти похожие ветки
← →
Juice © (2007-02-06 12:06) [0]Есть процедура, в ней цикл, в цикле при выполнении определенного логического условия я деляю raise Exception.Create("..."). Обработчиков внутри процедуры никаких нет. Исключительно на одной единственной машине при попадании в это условие генерится исключение и ... продолжает работать цикл !
procedure CalcStateOnDate(ADate : TDate; OriCoupons:TCoupons);
var
i : integer;
CurRate : Extended;
begin
CurRate := 0;
for i:=0 to High(OriCoupons) do
begin
...
else raise Exception.Create("Logical Error in CALCSTATEONDATE [{6084186F-143B-443E-B79A-200E360EBDF5}]");
end;//for i:=0 to High(OriCoupons) ...
end;
← →
Сергей М. © (2007-02-06 12:16) [1]procedure CalcStateOnDate(ADate : TDate; OriCoupons:TCoupons);
...
begin
try
.....
except
on e: Exception do begin
ShowMessage(e.classname + " " + e.message); //сообщение видишь ?
raise;
end;
end;
← →
Juice © (2007-02-06 12:33) [2]Да, вижу.
← →
Juice © (2007-02-06 12:44) [3]Так в чем прикол что приходиться делать так:
procedure CalcStateOnDate(ADate : TDate; OriCoupons:TCoupons);
...
begin
try
.....
except
raise;
end;
end;
???
Получается, что стандартный обработчик возвращает управление "по-адресу" ? Какая может быть причина почему так происходит?
← →
tesseract © (2007-02-06 12:53) [4]
> Так в чем прикол что приходиться делать так:
Потому как не всегда нужно возбуждать raise. Иногда ошибку можно просто задавить.
← →
Juice © (2007-02-06 13:06) [5]
> Потому как не всегда нужно возбуждать raise
Вот именно и интересует это. Нужно или можно ? Ну задавлю я ее в данном случае а вылезит в другом неожиданном месте. Интересует с чем связано такое поведение , насколько я знаю оно не влазит в рамки того как должно быть. Может кто-то думает иначе?
← →
Leonid Troyanovsky © (2007-02-06 13:11) [6]
> Juice © (06.02.07 13:06) [5]
> Вот именно и интересует это. Нужно или можно ? Ну задавлю
Не нужно и не можно.
> знаю оно не влазит в рамки того как должно быть. Может кто-
> то думает иначе?
Для того, чтобы начать думать нужно больше информации,
чем приведено.
Пока похоже, что у тебя некая наведенная ошибка, т.е.,
возникает она где-то в другом месте,
а в данном - лишь проявляется.
--
Regards, LVT.
← →
Сергей М. © (2007-02-06 13:15) [7]
> Juice © (06.02.07 12:33) [2]
Это означает лишь одно - твое утверждение
> генерится исключение и ... продолжает работать цикл
ложно.
← →
Juice © (2007-02-06 13:26) [8]
> Сергей М. © (06.02.07 13:15) [7]
Почему же это ? Когда я помещаю код в try ... except это уже совсем другой код. Так что мое утверждение истинно на все 100%, я сказал как есть. Тут на лицо один факт - если исключение самому обернуть в секцию то все нормально, а если нет то стандартный обработчик ведет себя не должным образом.
← →
Juice © (2007-02-06 13:27) [9]Кстати, это ноутбук Hewlett-Packard
← →
Kolan © (2007-02-06 13:35) [10]А ты с потоками работаешь?
← →
Сергей М. © (2007-02-06 13:36) [11]
> мое утверждение истинно на все 100%
Экий ты упрямый)
Пробуй так:
procedure CalcStateOnDate(ADate : TDate; OriCoup
ons:TCoupons);
...
begin
for i:=1 to 2 do begin
ShowMessage(IntToStr(i)+"я итерация цикла");
raise Exception.Create("");
end;
end;
Что видишь ?
> это ноутбук Hewlett-Packard
По барабану что это.
SEH - механизм программный, он специфичен для ОС, а не для железа.
← →
Juice © (2007-02-06 14:05) [12]Извиняюсь, я вас малость в заблуждение ввел. Все оказывается еще хуже.
> Сергей М. © (06.02.07 12:16) [1]
-оказалось что вижу только в том случае когда я иду пошагово отладчиком. А не вижу во всех остальных случаях:
1) Если запустить программу отдельно (исп.файл)
2) Если запустить через Run с выкл. Stop On Delphi Exceptions
3) Не вижу даже в том случае когда возникает исключение, происходит отсанов и я нажимаю Run. А если тут нажать StepOver то все нормально, попадаем в обработчик. Ну как вам такое поведение ? Честное слово даю все так и есть, слово в слово.
> А ты с потоками работаешь?
нет.
← →
Сергей М. © (2007-02-06 14:11) [13]
> Juice © (06.02.07 14:05) [12]
см. [11]
запускай без отладчика
?
← →
Juice © (2007-02-06 14:19) [14]
> Сергей М. © (06.02.07 14:11) [13]
Так нормально, 1я и все.
← →
Сергей М. © (2007-02-06 14:21) [15]
> Juice © (06.02.07 14:19) [14]
> Так нормально, 1я и все.
>
Ну а чем код в [11] принципиально отличается от твоего кода ? Ничем)
← →
Kolan © (2007-02-06 14:26) [16]> else raise Exception.Create("Logical Error in CALCSTATEONDATE
> [{6084186F-143B-443E-B79A-200E360EBDF5}]");
А возникает ли эксепшн? Може все дело в форматировании кода?
Напиши raise на другой строке...else
raise Exception.Create("Logical Error in CALCSTATEONDATE [{6084186F-143B-443E-B79A-200E360EBDF5}]");
← →
Juice © (2007-02-06 14:36) [17]Принципаильно нет, принципиально работать и так и так должно. Я только не могу понять ЧТО и как может повлиять настолько чтобы raise который стоит прямо перед except работал таким образом, да и еще с разницой под отладчиком оно или нет ?
← →
Juice © (2007-02-06 14:37) [18]
> разницой
разницЕй
← →
DiamondShark © (2007-02-06 19:08) [19]
> Я только не могу понять ЧТО и как может повлиять настолько
> чтобы raise который стоит прямо перед except работал таким
> образом, да и еще с разницой под отладчиком оно или нет
> ?
Очень даже простое "ЧТО" -- весь остальной код от begin до raise, который ты поскипал.
Кто тебя знает, может ты там стек портишь.
← →
GrayFace © (2007-02-06 21:56) [20]tesseract © (06.02.07 12:53) [4]
Потому как не всегда нужно возбуждать raise. Иногда ошибку можно просто задавить.
В крайне редких случаях.
← →
GrayFace © (2007-02-06 22:01) [21]RaiseExceptionProc ты, наверняка, не меняешь? Хотя какой-нибудь странный компонент может и менять.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c