Другие языки программирования и технологии

Обработка исключительных ситуаций. Как правильно использовать? Как она применяется на практике в реальных программах?

Для чего вообще предназначена обработка исключений?
Обработка исключения и продолжение работы программы или обработка и завершение с информированием об ошибке?
В книжках она демонстрируется на уровне "ввели неверное значение, деление на 0, выход за границы массива", но это же логичней предусмотреть с помощью условий, акссессоров и т. п.
Когда нужно применять условия, а когда обработку?
> Как правильно использовать?
В кодах, способных вызвать исключительные ситуации, не подлежащие предотвращению с помощью условий, акссессоров и т. п.

> Для чего вообще предназначена обработка исключений?
Для запрета на выдачу стандратного сообщения об ошибке и возможной его замены на собственное (например, локализованное) .

> Обработка исключения и продолжение работы программы или обработка и завершение с информированием об ошибке?
По возможности, первое.

> В книжках она демонстрируется на уровне "ввели неверное значение, деление на 0, выход за границы массива", но это же логичней предусмотреть с помощью условий, акссессоров и т. п.
Верно.

> Когда нужно применять условия, а когда обработку?
В большинстве случаев, можно и нужно применять условия.

Но приведу пример.
В ADО. NET заполнение набора данных DataSet данными из файла XML осуществляется методом ReadXml() класса DataSet:
dataSet1.ReadXml("C:\\file.xml");

А теперь смотрите.
Если файла C:\file.xml на диске не окажется, возникнет исключительная ситуация.
Если файл C:\file.xml окажется повреждённым, возникнет исключительная ситуация.
Если в файле C:\file.xml окажется опечатка, возникнет исключительная ситуация.

То же самое в примере, приведённом ответчиком Chaz Ashley ниже.

Очевидно, ни в первом, ни во втором случае условия не подходят. Остаётся использовать обработку исключительных ситуаций.
Мара Ырысбеков Спасибо. Все понятно)
SQLconnection cnn = new SQLconnection(connectionString);

SQLCommand comm = new SQLCommand("delete from table",cnn);

try
{
cnn.Open();
comm.ExecuteScalar();
cnn.Close();
MesageBox.Show("Запрос выполнился успешно! ");
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
Если у нас все ок. то выполняется запрос и вылазит табличка, что все прошло успешно, если соединение не удалось или еще че, то вылезет окошко с сообщением об ошибке. Если не использовать конструкцию try catch, то программа зависла бы и пришлось бы перезапускать, а с try catch у нас просто вылезет сообщение об ошибке, и программа продолжит выполнятся
Алексей Мажин
Алексей Мажин
8 401
Максим Левченков Мой вариант проще.
dataSet1.ReadXml(C:\file.xml);
Условия: Введите возраст: Восемьнадцать лет
if ((age = atoi(scanf(...) == 0)) // имеется ввиду, что функция а ту и, не смогла выудить числа в стринге.
printf("Error");

обработка, как пример, когда нужно из "18 лет" вырезать только 18, зная, что юзВерь может ошибиться, и ввести дополнительно что-то.
Или введите число от 1 до 5: 8 - Ошибка
Что касается вашего примера, с 0, это условие.. . хотя это также может и обработка.. . в зависимости от логики программиста, если он исключает ноль, то это условие, а если он проверяет ввод, и обнаруживает там, число, не равное 1-65535

Или я Вас не так понял?
Rustam Abunaev
Rustam Abunaev
705