Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужно ли отлавливать исключения 
:(
    Опции темы
EKoshelev
Дата 4.2.2005, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 509
Регистрация: 1.9.2004

Репутация: нет
Всего: нет



Я, например, никогда в своих прогах не отлавливаю исключения. Если мне нужно разделить одно число на другое я проверяю делитель на ноль. И если ноль, то выполняю какие-то действия. На сколько я понимаю это дело можно отловить с помощью try.

Как вы считаете рационально я поступаю не отлавливая исключения. Может я что-то при этом теряю. Обрисуйте пожалуйста плюсы и минусы.


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
Akella
Дата 4.2.2005, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Я "отлавливаю" исключения только там, где мне нужно вывести свое сообщение об ошибке, т.е. можно не только вывести сообщение о том, что программа выполнила недопустимую ошибку, а и о том, что нужно сделать, что в следующий раз такой ошибки не было.
PM MAIL   Вверх
Snowy
Дата 4.2.2005, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Отлавливать нужно, когда вызываешь чужую функцию. Свое можно просто проверять, если уверен, что ничего не пропустишь. Когда кода много, то высока и вероятность того, что где-то то-то упустить.
Кроме того ловить нужно, когда работаешь с аппаратной частью, сетью и прочими вещами, когда нет гарантии, что все пройдет путём.
PM MAIL   Вверх
<Spawn>
Дата 4.2.2005, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Я ставлю блок отлавливания исключений в случае, если нет 100% вероятности положительного исхода выполнения кода. Причем не обязательно для этого должны быть вызваны "не свои" функции \ методы классов - в свох же я в критичных местах генерирую исключение сам, что бы на программном слое более высокого уровня адекватно отреагировать на исключение и прервать дальнейший ход работы кода без выплнения тучи вложеных ветвлений.

Цитата
Когда кода много, то высока и вероятность того, что где-то то-то упустить


В таких случаях нужно дробить сплошной код на более мелкие блоки - функции, каждый из которых укладывался бы строках в 15-ти(и его было бы легко тестировать) - это кстати одна из идей рефакторинга.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Akella
Дата 4.2.2005, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Такая ситуация. Импорт данных из Excel в твою БД. Импортируются данные в ячейку типа Number (таблица Paradox).
В ячейках могут быть данные типа:
4,25
2,85
5,6
пробел8,56 -при импорте этой строки может произойти ошикба.

Код

try
 TTable1.Fields[2].AsFloat := WorkSheet.Cells.Item[iRow,sCol].Value;
except
 TTable1.Fields[2].AsFloat := 0;
end;


Я использую F1Book
Код

     try//попытка преобразовать
      tTempTPrice.AsFloat:=StrToFloat(F1.TextRC[I,2]);
     except
      tTempTPrice.AsFloat:=0;
     end;//try-except попытка преобразовать

PM MAIL   Вверх
Alex
Дата 4.2.2005, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(dsergey @ 4.2.2005, 12:55)
Код
    try//попытка преобразовать
     tTempTPrice.AsFloat:=StrToFloat(F1.TextRC[I,2]);
    except
     tTempTPrice.AsFloat:=0;
    end;//try-except попытка преобразовать

Ужас какой, а я обычно записываю все это ввиде 1 строки:
Код

tTempTPrice.AsFloat:=StrToFloatDef(Trim(F1.TextRC[I,2]), 0);



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Akella
Дата 5.2.2005, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Вау! Нашел в справке по Delphi еще такое "floating point conversion routines".
Как говориться, век живи - век учись.
PM MAIL   Вверх
Петрович
Дата 8.2.2005, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Я не только использую try except end для обработки ошибок возникающих в вызываемых мною функциях, процедурах и методах, но и сам активно использую генерацию исключений (raise) в своих процедурах, функциях и методах. Это очень удобный механизм структурных переходов, причем не только в ошибочных ситуациях. А уж в ошибочных, это еще и возможность передать на более верхний уровень (не обязательно вызывающий) дополнительную информацию о возникшей ошибке которая может быть либо просто показана пользователю, либо проанализирована и обработана программой.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.