Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

Как же работает 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
15-1176208418
Ega23
2007-04-10 16:33
2007.05.06
Знатокам Sybase Power Desigher


2-1176459620
Romm
2007-04-13 14:20
2007.05.06
Вопросик...


15-1176279768
homm
2007-04-11 12:22
2007.05.06
DMClient bugreport


1-1172824942
Kirflaer
2007-03-02 11:42
2007.05.06
Как перенести текст из RichEdit с сохранением форматирования


5-1153210679
DevilDevil
2006-07-18 12:17
2007.05.06
Как отследить изменение размера TCustomControl компонента?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский