Матричная лаборатория MatLab

         

Функция lasterr и обработка ошибок


Опытные программисты должны предусматривать ситуации с появлением ошибок. К примеру, при х =

0 выражение sin(x)/x = 0/0 = 1 и правильным решением было бы вместо его вычисления использовать значение 1.

В данном простом примере приводится функция sdO, исключающая вычисление sin(x)/x при х = 0:

function f=sdO(x) 

if x==0 f=1; 

else f=sin(x)/x; 

end 

return

При этом вычисления пройдут корректно при любом х:

» sd0(l)

ans=

0.8415 

»sd0(0) 

ans = 

1

Для вывода сообщения о последней произошедшей ошибке служит функция lasterr (см. пример ниже):

» ааа

??? Undefined function or variable 'aaa'. 

» 2+3 

ans =

5

» 1/0

Warning: Divide by zero, 

ans =

Inf

» lasterr 

ans = Undefined function or variable 'aaa'.

Как нетрудно заметить, функция lasterr возвращает текстовое сообщение, следующее за знаками ??? сообщения об ошибке.

В общем случае программы могут содержать обработчики ошибок, направляющие ход вычислений в нужное русло, даже если появляется ошибка. Но для этого требуются средства индикации и обработки ошибок. Основными из них являются функции eval и l asterr. О функции lasterr уже говорилось, а функция eval (' try', 'catch') в отличие от ранее рассмотренной формы (урок 18) имеет два входных аргумента. Один из них — это строчное выражение, которое преобразуется в исполняемую форму и выполняется при отсутствии ошибки. Если же происходит ошибка, то строка ' catch' вызывает обращение к функции обработки ошибки.

 

Содержание раздела