Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.06;
Скачать: CL | DM;

Вниз

Как же работает try...except ?   Найти похожие ветки 

 
Kostafey ©   (2007-04-08 22:18) [0]

Что-то я не понял:

try
 SomeDataSet.Post;
except
 ShowMessage("Эррор и все такое");
end

Получаем сообщение "Эррор и все такое".

Дальше:

try
 SomeDataSet.Post;
 ShowMessage("Увсе сработало");
except
 ShowMessage("Эррор и все такое");
end

Условия все те же самые, но сообщение получаем только: "Увсе сработало".

Ведь в except можно попасть только при исключительной ситуации? Или нет?

P.S. 17-ю строчку проверял. Там все Ок!


 
homm ©   (2007-04-08 22:21) [1]

> [0] Kostafey ©   (08.04.07 22:18)

А что тут непонятного? Припервом тесте произошла ошибка, при втором нет.


 
Alx2 ©   (2007-04-08 22:32) [2]

Вроде все как надо. :)

procedure TForm1.Button1Click(Sender: TObject);
Var a ,b: integer;
begin
b := 0;
try
  a := a div b;
  ShowMessage("ok!");
  showmessage(inttostr(a));
except
  ShowMessage("error!");
end;
end;


 
Kostafey ©   (2007-04-08 22:56) [3]

> А что тут непонятного? Припервом тесте произошла ошибка,
> при втором нет.

Я бы тоже так подумал если бы не сам тест делал :)
Условия теста абсолютно одинаковы. И ошибки быть не могло.
Вот и стал я сомневаться может 2*2 не 4, а блок except начианет
выполняться после успешнного выполнения всех операторов в блоке try?

Вот и уверуешь тут в переселение душ (С)


 
palva ©   (2007-04-08 23:11) [4]

Можно ведь напечатать сообщение Message и посмотреть, какая ошибка происходит и какой у нее тип.


 
Зяма   (2007-04-08 23:15) [5]

может 2*2 не 4, а блок except начианет
выполняться после успешнного выполнения всех операторов в блоке try?


Нет.

****************************

var
 y: double;

try
 y := y / 0;
except
ShowMessage("Эррор и все такое");
end;

try
y := y / 0;
ShowMessage("Увсе сработало");
except
ShowMessage("Эррор и все такое");
end;


 
Loginov Dmitry ©   (2007-04-08 23:41) [6]

Нет ничего невозможного. Бывают и такие ситуации, когда всего одна лишняя строка кода может блокировать генерацию исключения (да ну хоть просто лишний перевод строки). А вот если используешь всякие недоделанные TChart"ы или глюченные TDataSet"ы, то вероятность, что подобное может произойти больше нуля. И исключение когда нибудь все-равно будет сгенерировано, причем при выполнении самого безобидного кода, например IntValue := IntValue1 + IntValue2, и отлаживать подобные ошибки можно сутками, хотя возникают они гораздо раньше, где-нибудь в клоаках генофонда.

Поэтому лично я не исключаю, что в первом случае при выполнении "условного" Post ошибка была сгенерирована, а во втором случае по причине кривости генофонда (а может и BDE, если таковая используется) - нет.


 
Kostafey ©   (2007-04-08 23:52) [7]

> [6] Loginov Dmitry ©   (08.04.07 23:41)

Весьма познавательно.
Вообще, я испльзовал ADO.

К счастью, ошибка больше не повторялась, правда
объяснить ее первое появление я так и не смог.


 
sniknik ©   (2007-04-09 00:06) [8]

> К счастью, ошибка больше не повторялась, правда
правильно! ну ее. чего разбираться, пусть у пользователей программы голова болит когда умудрятся воспроизвести условия при которой она возникает...

> объяснить ее первое появление я так и не смог.
и как ты ее вообще хотел обьяснить? ведь ты спрятал настоящую ошибку, в которой были подробности. заменил ее на свою маловразумительную фигню...
даже если ситуация когданибудь повторится, вместе с ошибкой... никакой новой информации о ней не будет.


 
MikePetrichenko ©   (2007-04-09 03:08) [9]

Отключи оптимизатор и посмотри. А то порой такого наоптимизирует.
У меня вот давеча прикол был. Короче были методы класса. Решил оформить их как локальные процедуры для другой процедуры (потому-как они только оттуда вызываются).
В общем эти процедуры должны были использваоть объек созданный в вызывающей процедуре. И что бы вы думали. Оптимизатор на двухядрах или на гипертредных процах начинал выполнять локальные процедуры ДО создания объекта. Отключил оптимизатор - все заработало.


 
Германн ©   (2007-04-09 03:13) [10]


> MikePetrichenko ©   (09.04.07 03:08) [9]
>
> Отключи оптимизатор и посмотри. А то порой такого наоптимизирует.
>

Как не оптимизируй [0], никак не получишь ситуацию автора сабжа. Имхо.


 
MikePetrichenko ©   (2007-04-09 03:19) [11]

Смотря что у него повешено на OnPost....


 
Германн ©   (2007-04-09 03:47) [12]


> MikePetrichenko ©   (09.04.07 03:19) [11]
>
> Смотря что у него повешено на OnPost....
>

А что бы и не было повешено! Если автор не врёт, что у него всё одинаково.
И без учёта sniknik ©   (09.04.07 00:06) [8] никогда и ничего не получится.

P.S. Вру. Может что-то получиться. Геморрой!

P.P.S. Не глядя, могу "навскидку" предложить два объяснения глюка. Но оба они не были бы глюками, а были бы обычными ошибками, если бы не ShowMessage("Эррор и все такое");


 
Kostafey ©   (2007-04-09 03:56) [13]

> [8] sniknik ©   (09.04.07 00:06)

Ладно, ладно вы мне вернули интерес к проблеме. Разберусь - отпишу.
Только уже завтра...то есть утром...то есть после обеда...:)


 
Германн ©   (2007-04-09 04:08) [14]


> Kostafey ©   (09.04.07 03:56) [13]
>
> > [8] sniknik ©   (09.04.07 00:06)
>
> Ладно, ладно вы мне вернули интерес к проблеме. Разберусь
> - отпишу.
> Только уже завтра...то есть утром...то есть после обеда.
> ..:)
>

Да хоть "в пятницу, после дождичка в четверг"!
Твоя ж проблема, тебе и будут навешивать, но не нам :)


 
homm ©   (2007-04-09 06:21) [15]

> Вот и стал я сомневаться может 2*2 не 4, а блок except начианет
> выполняться после успешнного выполнения всех операторов
> в блоке try?

Нет.



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

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

Наверх




Память: 0.51 MB
Время: 0.019 c
15-1175917704
Dismember
2007-04-07 07:48
2007.05.06
Сортировка Шелла


15-1175927960
ArMellon
2007-04-07 10:39
2007.05.06
Как экспортировать ветку рееста в файл и обратно импортировать


2-1176473314
АлексейМ
2007-04-13 18:08
2007.05.06
TDBComboBox


1-1170623927
Blacksus
2007-02-05 00:18
2007.05.06
ловушка и форма


15-1176015665
IMHO
2007-04-08 11:01
2007.05.06
SureType vs QWERTY