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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2014, 12:58   #1
AlexDn
Пользователь
 
Регистрация: 02.10.2009
Сообщений: 93
По умолчанию Try except

Есть небольшое выражение -

Код:
var a,b,c:real;
c:=a/b;
Как правильно расставить try except чтобы программа не писала Error, division by zero, а написала ShowMessage('Деление на 0, b=0');?
AlexDn вне форума Ответить с цитированием
Старый 20.02.2014, 13:16   #2
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Правильнее перед делением проверять чтоб b не равнялось нулю. А вообще расставляется так.

Код:
try
//проверяемая секция кода
except
on e: Exception do begin
ShowMessage(e.Message);
ShowMessage('Деление на 0, b=0');
end;
end;

Последний раз редактировалось doktor255; 20.02.2014 в 13:22.
doktor255 вне форума Ответить с цитированием
Старый 20.02.2014, 14:53   #3
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

а не будет ли лучше заранее проверять делитель, и если он равен нулю, вместо деления выводить сообщение?!
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 20.02.2014, 15:30   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
не писала Error, division by zero, а написала ShowMessage('Деление на 0, b=0');
1. посмотреть какое исключение отвечает за это. узнать можно
почитав справку
попробовав п.3.
ответ. EZeroDivide
2. ловить его и только его! on e: EZeroDivide
3. если очень хочется то ловить остальные в другом ветке
Код:
try
  x:=a/b;
except
  on EzeroDivide do ShowMessage('делитель=0'); //2
  on e: Exception do ShowMessage('неожиданная ошибка: '+e.ClassName#13#10+e.message); // 3
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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