Последнее сообщение об ошибке и связанная информация
Примечание
lasterror будет удален в следующем выпуске. Вы можете получить информацию о любой ошибке, которая была сгенерирована путем захвата MException объект.
s = lasterror
s = lasterror(err)
s = lasterror('reset')
s = lasterror возвращает структуру s содержит информацию о последней ошибке, выданной MATLAB ®. Возвращаемая структура содержит следующие поля:
| Fieldname | Описание |
|---|---|
| Символьный массив, содержащий текст сообщения об ошибке. |
| Символьный массив, содержащий идентификатор ошибки. Если последняя ошибка, выданная MATLAB, не имела идентификатора ошибки, то |
| Структура, предоставляющая информацию о местоположении ошибки. Структура имеет поля |
Примечание
Возвращенная структура по lasterror может содержать дополнительные поля в будущих версиях MATLAB.
Поля структуры, возвращенные в stack являются
| Fieldname | Описание |
|---|---|
| Имя файла, в котором появляется функция, генерирующая ошибку. Это поле является пустым вектором символов, если файл отсутствует. |
| Имя функции, в которой произошла ошибка. Если это основная функция в файле, и имя функции отличается от имени файла, |
| Номер строки файла, в котором произошла ошибка. |
Дополнительные сведения об идентификаторах ошибок см. в разделе MException.
s = lasterror(err) устанавливает последнюю информацию об ошибке для сообщения об ошибке и идентификатора, указанного в структуре err. Последующие вызовы lasterror возвращает новую информацию об ошибке. Необязательная структура возврата s содержит информацию о предыдущей ошибке.
s = lasterror('reset') устанавливает последнюю информацию об ошибке в состояние по умолчанию. В этом состоянии message и identifier поля возвращаемой структуры являются пустыми векторами символов, и stack поле является структурой 0 на 1.
Сохраните следующий код MATLAB в файле с именем average.m:
function y = average(x)
% AVERAGE Mean of vector elements.
% AVERAGE(X), where X is a vector, is the mean of vector elements.
% Nonvector input results in an error.
check_inputs(x)
y = sum(x)/length(x); % The actual computation
function check_inputs(x)
[m,n] = size(x);
if (~((m == 1) || (n == 1)) || (m == 1 && n == 1))
error('AVG:NotAVector', 'Input must be a vector.')
endТеперь запустите функцию. Поскольку эта функция требует векторного ввода, передача ей скалярного значения вызывает ошибку. Ошибка возникает в подпрограмме check_inputs:
average(200) Error using average>check_inputs (line 11) Input must be a vector. Error in average (line 5) check_inputs(x)
Получить три поля из lasterror:
err = lasterror
err =
message: [1x61 char]
identifier: 'AVG:NotAVector'
stack: [2x1 struct]
Выведите текст сообщения об ошибке:
msg = err.message
msg =
Error using average>check_inputs (line 11)
Input must be a vector.Отображение полей, содержащих stack информация. err.stack является структурой «2 на 1», поскольку она предоставляет информацию об ошибке подпрограммы check_inputs а также внешняя, первичная функция average:
st1 = err.stack(1,1)
st1 =
file: 'd:\matlab_test\average.m'
name: 'check_inputs'
line: 11
st2 = err.stack(2,1)
st2 =
file: 'd:\matlab_test\average.m'
name: 'average'
line: 5Примечание
Как правило, имя основной функции должно совпадать с именем файла, содержащего эту функцию. Если эти имена различаются, MATLAB использует имя файла в name области stack структура.
lasterror часто используется в сочетании с rethrow функция в try, catch заявления. Например,
try do_something catch do_cleanup rethrow(lasterror) end
MathWorks ® постепенно переводит обработку ошибок MATLAB в объектно-ориентированную схему, основанную на MException класс. Хотя поддержка lasterror ожидается продолжение с использованием статического MException.last способ MException является предпочтительным.
Предупреждение
lasterror и MException.last не гарантировано всегда возвращать идентичные результаты. Например, MException.last обновляет свой статус ошибки только при неподтвержденных ошибках, где lasterror может обновить состояние ошибки при любой ошибке, независимо от того, обнаружена она или нет.
assert | dbstack | error | lastwarn | MException | MException.last | rethrow | try, catch