Последнее сообщение об ошибке
lasterr будет удален в будущей версии. Можно получить информацию о любой ошибке, которая была сгенерирована путем ловли MException. Смотрите информацию о Получении Об Исключениях в документации Основ программирования.
msgstr
= lasterr
[msgstr, msgid] = lasterr
lasterr('new_msgstr')
lasterr('new_msgstr', 'new_msgid')
[msgstr, msgid] = lasterr('new_msgstr',
'new_msgid')
msgstr
= lasterr возвращает последнее сообщение об ошибке, сгенерированное MATLAB.
[msgstr, msgid] = lasterr возвращает последнюю ошибку в msgstr и его идентификатор сообщения в msgid. Если ошибка не была задана с идентификатором, lasterr возвращает пустой символьный вектор для msgid. Смотрите Идентификаторы сообщений в документации Основ программирования MATLAB для получения дополнительной информации об аргументе msgid и как использовать его.
lasterr('new_msgstr') устанавливает последнее сообщение об ошибке на новый вектор символов, new_msgstr, так, чтобы последующие вызовы lasterr возвратили новое сообщение об ошибке. Можно также установить последнюю ошибку на пустой символьный вектор с lasterr('').
lasterr('new_msgstr', 'new_msgid') устанавливает последнее сообщение об ошибке и его идентификатор к new_msgstr и new_msgid, соответственно. Последующие вызовы lasterr возвращают новое сообщение об ошибке и идентификатор сообщения.
[msgstr, msgid] = lasterr('new_msgstr',
'new_msgid') возвращает последнее сообщение об ошибке и его идентификатор, также изменяя эти значения так, чтобы последующие вызовы lasterr возвратили сообщение и идентификатор, заданный new_msgstr и new_msgid соответственно.
Вот функция, которая исследует вектор символов lasterr и отображает его собственное сообщение на основе ошибки, которая в последний раз произошла. Этот пример имеет дело с двумя случаями, каждый из которых является ошибкой, которая может следовать из матрицы, умножьтесь:
function matrix_multiply(A, B)
try
A * B
catch
errmsg = lasterr;
if(strfind(errmsg, 'Inner matrix dimensions'))
disp('** Wrong dimensions for matrix multiply')
else
if(strfind(errmsg, 'not defined for variables of class'))
disp('** Both arguments must be double matrices')
end
end
endЕсли вы вызываете эту функцию с матрицами, которые несовместимы для умножения матриц (например, размерность столбца A не равна размерности строки B), MATLAB фиксирует ошибку и использует lasterr, чтобы определить его источник:
A = [1 2 3; 6 7 2; 0 -1 5]; B = [9 5 6; 0 4 9]; matrix_multiply(A, B) ** Wrong dimensions for matrix multiply
Задайте идентификатор сообщения и сообщение об ошибке с error:
error('MyToolbox:angleTooLarge', ...
'The angle specified must be less than 90 degrees.');В вашем коде обработки ошибок используйте lasterr, чтобы определить идентификатор сообщения и сообщение об ошибке для провальной операции:
[errmsg, msgid] = lasterr errmsg = The angle specified must be less than 90 degrees. msgid = MyToolbox:angleTooLarge