How do I handle BOTH MException and MSLException

조회 수: 6 (최근 30일)
Virgil Bell
Virgil Bell 2015년 3월 16일
편집: per isakson 2015년 4월 3일
I am very experienced with exceptions in C++ so the concept is nothing new to me. However. implementing it in the Mathworks world is. I have a handler function that I want to accept a generic exception object and inside the handler determine which exception ofject it is and act based on that determination. "isa" doesn't work since it returns a 1 regardless if I check it for MSLException or MException.
Bottom line, if I could figure out a way to determine if an exception object was either a MSLException or a MException then I can take it from there.
Any ideas?

채택된 답변

Virgil Bell
Virgil Bell 2015년 3월 16일
편집: per isakson 2015년 4월 3일
I just figured out a workable solution.
"my_exception" is an exception object generated by my program.
if (strcmp('MSLException',class(my_exception)))
Temp_exception = MException(my_exception.identifier, my_exception.message);
Temp_exception = addCause(Temp_exception, my_exception);
% store exception info
SAVE_MY_EXCEPION(Temp_exception);
else
% it isn't so store my_exception info
SAVE_MY_EXCEPION(my_exception);
end
Sure I sacrifice the MSLException handle information, but I get to store the exception information. I'd love to create storage for MSLException objects, but I don't see how to create that object. Creating it the same way as a MException doesn't work. a = MSLException('tempidentifier', 'tempmessage'); fails.

추가 답변 (1개)

Sean de Wolski
Sean de Wolski 2015년 3월 16일
편집: Sean de Wolski 2015년 3월 16일
MSLException inherits from MException so isa will return true for both. A regular MException is not necessary an MLSException, so test this:
kdlsjfajfe % errors
ME = MException.last;
isa(ME,'MSLException')
  댓글 수: 2
Virgil Bell
Virgil Bell 2015년 3월 16일
Good idea but what if I throw a MException and then a MSLException? I need to handle based on the exception at hand and not based on what the previous exception was.
Sean de Wolski
Sean de Wolski 2015년 3월 16일
편집: Sean de Wolski 2015년 3월 16일
That was just for me to create one for you.
In reality
try
% Whatever you're doing
catch ME
if(isa(ME,'MSLException'))
% it is
else
% it's a regular MException
end
end

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Function-Based Unit Tests에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by