Обработка исключений
Конструкция «Попытка…Исключение»
Обработка исключений предназначена для перехвата ошибок (исключительных ситуаций), возникающих в процессе работы программы. Если возникла ошибка, и она не была перехвачена, то выдается системное сообщение об ошибке, и выполнение модуля прерывается.
Однако разработчик может перехватывать возникающие ошибки и обрабатывать их по своему усмотрению, например:
-
Попытка -
СредняяЦена = СуммаВсего / Количество; -
Исключение -
//Возникла ошибка деления на ноль. -
//Будем считать, что количество равно 1. -
Количество = 1; -
СредняяЦена = СуммаВсего; -
КонецПопытки;
Чем меньше в вашей программе будет таких конструкций, тем лучше. Все потенциальные ошибки необходимо «отлавливать» по возможности еще до их возникновения. Конструкцию Попытка следует применять для внешних ошибок и при работе с базой данных, т.е. для тех ошибок, которые не являются ошибкой написания программы.
В следующем примере производится попытка записать файл, и если возникнет ошибка, то она будет перехвачена обработчиком исключений:
-
Попытка -
ТекстФайл.Записать(ПутьКФайлу); -
Исключение -
Сообщить("Не удалось записать файл!"); -
КонецПопытки;
Внутри блока Исключение…КонецПопытки можно вызвать функцию ОписаниеОшибки, которая возвращает сообщение о возникшей ошибке в виде строки. Эту строку можно выдать в окно сообщений, записать в журнал регистрации или выполнить другие действия.
Кроме того, есть команда ВызватьИсключение, которая может применяться только внутри блока обработки исключения. Хотя программист и обработал ошибку, но он может ее пропустить (передать обработчику вышестоящего уровня), например, если она неисправима:
-
Попытка
-
СредняяЦена = СуммаВсего / Количество;
-
Исключение
-
Сообщить("Эх! Надо было проверить количество на ноль!"); -
Сообщить(ОписаниеОшибки());
-
ЗаписьЖурналаРегистрации(ОписаниеОшибки());
-
//хотя мы и обработали ошибку, но программу все равно прервем
-
ВызватьИсключение;
-
КонецПопытки;
Обработчики исключений могут быть вложенными друг в друга. Если ошибка не обработана во внутреннем блоке Исключение…КонецПопытки, тогда она обрабатывается внешним обработчиком, а если его нет, выдается системное сообщение об ошибке.