Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.04 c
11-1149511993
shalex
2006-06-05 16:53
2007.02.25
Как изменить свойства ListBox в run time?


2-1170746474
Grover
2007-02-06 10:21
2007.02.25
Использование dll


15-1170324550
ocean
2007-02-01 13:09
2007.02.25
Витая пара на 200 м


11-1149072986
GMax
2006-05-31 14:56
2007.02.25
ScrollBox глючит


2-1170542958
Student_
2007-02-04 01:49
2007.02.25
Обработчик для SpeedButton





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский