Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Нужно ли отлавливать исключения


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

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

Автор: Akella 4.2.2005, 09:52
Я "отлавливаю" исключения только там, где мне нужно вывести свое сообщение об ошибке, т.е. можно не только вывести сообщение о том, что программа выполнила недопустимую ошибку, а и о том, что нужно сделать, что в следующий раз такой ошибки не было.

Автор: Snowy 4.2.2005, 12:17
Отлавливать нужно, когда вызываешь чужую функцию. Свое можно просто проверять, если уверен, что ничего не пропустишь. Когда кода много, то высока и вероятность того, что где-то то-то упустить.
Кроме того ловить нужно, когда работаешь с аппаратной частью, сетью и прочими вещами, когда нет гарантии, что все пройдет путём.

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

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


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

Автор: Akella 4.2.2005, 12:55
Такая ситуация. Импорт данных из 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 попытка преобразовать

Автор: Alex 4.2.2005, 14:08
Цитата(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);

Автор: Akella 5.2.2005, 11:55
Вау! Нашел в справке по Delphi еще такое "floating point conversion routines".
Как говориться, век живи - век учись.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)