How to obtain a warning message?

6 views (last 30 days)
Zoltán Csáti
Zoltán Csáti on 27 Aug 2013
I would like to extract the warning message, that a function throws. For example
syms x
solve(sin(1/sqrt(x)))
generates the warning:
Warning: The solutions are parametrized by the symbols:
k = Z_
I want to put the message to a variable programmatically. How can I make this? Thanks.
P.s. I know about lastwarn but I need to handle several warnings not just the last one.

Accepted Answer

Jan
Jan on 27 Aug 2013
Edited: Jan on 27 Aug 2013
As you found out already, lastwarn contains the last message only. You could overload the function warning to create a history of messages:
function varargout = warning(varargin)
persistent MsgList
if isa(MsgList, 'double')
MsgList = {};
end
if nargin == 2 && isempty(varargin{1}) && isa(varargin{1}, 'double')
switch varargin{2}
case 'GetList'
varargout{1} = MsgList;
return;
case 'ResetList'
MsgList = {};
return;
end % No OTHERWISE!
varargout = cell(1, nargout);
[varargout{:}] = builtin('warning', varargin{:});
MsgList{length(MsgList) + 1} = lastwarn;
This adds new messages for commands like warning('off', 'backtrace') also, so much more details are required for a smart behavior. But this demonstrates the general idea.
[EDITED] I've replaced the method to obtain and clear the list of messages. Using a magic string method in the first input is not 100% clean. Now this is used for controlling:
warning([], 'GetList')
warning([], 'ClearList')
Although it is very unlikely that somebody uses the warning message '$GetList', it might be a trap
  3 Comments
Jan
Jan on 27 Aug 2013
The leading '$' should reduce the danger for a collision with a warning message. It is more unlikely that a warning message is called '$GetList' than 'GetList'. But such "magic strings", which cause a different behavios of the function, are a bad idea. I replace this by another approach.

Sign in to comment.

More Answers (0)

Categories

Find more on Error Handling in Help Center and File Exchange

Tags

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!