Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2010, 23:58   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Как работает else в try...except...end?

Я думал так:
Код:
try
 //попытка
except
 on e:exception do
   //что делаем в случае ошибки
 else
   //что, если всё хорошо
end
Но попробововав - понял, что это неправда.
TwiX вне форума Ответить с цитированием
Старый 19.03.2010, 00:14   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в тот блок, который от except до .. end управление будет передано в том случае, если возникло исключение. Там его можно обработать. а else относиться к on e:exception (вы можете обработать определённые исключения (подробнее смотри хелп,F1)
а если исключение не попало в эту обработку, то выполнится блок в else
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.03.2010, 01:16   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

спасибо, я так и думал. Просто не было шанса проверить - всегда Exception пишу.
А как сделать так, чтобы никогда ошибка не вылетала? Слышал что можножно чего-нить сделать с Application.OnException. Это правда?
Или достаточно написать {-I}?
TwiX вне форума Ответить с цитированием
Старый 19.03.2010, 01:30   #4
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

если ошибка в между try и except то вылетать не че не будет
если тебе не надо не как обрабатывать ошибку то можешь написать так
try
//код..
except
end;
пауэрлифтинг вне форума Ответить с цитированием
Старый 19.03.2010, 01:33   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Возможно ТС лучше тогда использовать блок try ... finally. Будет, так сказать, тихая обработка ошибки.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 19.03.2010, 02:33   #6
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

2spamer, там никак нельзя определить когда была ошибки (ну можно, только немного по-кривому)

З.ы. я всего-лишь спрашивал, как работает else
TwiX вне форума Ответить с цитированием
Старый 19.03.2010, 09:05   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
блок try ... finally. Будет, так сказать, тихая обработка ошибки.
'
это не тихая обработка это ГАРАНТИРОВАННОЕ выполнение кода в блоке
finally
end; и возобновление exception если оно было
применяется для освобождения ресурсов и восстановления нормальногго состояноия программы.

try
l:=TStringList.Create;
try
l.LoadFromfile(...);
l.strings[11]:='ghhhj'; // здесь может быть exception (list index bound)
l.savetofile(...);
finally
l.Free; ..мы гарантируем что объект l(TStringList) будет уничтожен
end;
except ////но информация об exception будет распространяться
// и мы попадем суда
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.03.2010, 14:29   #8
AK BULLETS
Пользователь
 
Регистрация: 18.03.2010
Сообщений: 88
По умолчанию

Пробывал.
К примеру

try
Connection.Connected:=true;
except
ShowMessage('Неверная база данных!');
end;

Если к примеру коннектиться по неверной коннект строке, то на сообщение не попадает.
Выводит другое сообщение, техническое.
А хочется "Неверная база данных!"
Как быть?
AK BULLETS вне форума Ответить с цитированием
Старый 19.03.2010, 14:40   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

AK BULLETS, а вы уверены что компонент ваш бросает исключение?
(и всегда пробуйте вне Делфи(или отключайте остановку на исключениях))
может там есть событие OnError
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.03.2010, 15:31   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Выводит другое сообщение, техническое.
А хочется "Неверная база данных!"
Как быть?
здесь есть ответ на этот вопрос
а эта тема есть в списке похожих внизу страницы
http://programmersforum.ru/showthread.php?t=29048
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Unexpected end of file nemq Паскаль, Turbo Pascal, PascalABC.NET 13 02.01.2010 05:55
try.. except.. end; mosq Общие вопросы Delphi 3 30.09.2009 18:49
Проблема TRY ... EXCEPT ... END chandrasecar Общие вопросы Delphi 4 05.11.2008 01:17
expected END but : found qqanton Помощь студентам 2 31.10.2008 17:45