How do I handle BOTH MException and MSLException

4 visualizzazioni (ultimi 30 giorni)
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?

Risposta accettata

Virgil Bell
Virgil Bell il 16 Mar 2015
Modificato: per isakson il 3 Apr 2015
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.

Più risposte (1)

Sean de Wolski
Sean de Wolski il 16 Mar 2015
Modificato: Sean de Wolski il 16 Mar 2015
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 Commenti
Virgil Bell
Virgil Bell il 16 Mar 2015
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 il 16 Mar 2015
Modificato: Sean de Wolski il 16 Mar 2015
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

Accedi per commentare.

Categorie

Scopri di più su Introduction to Installation and Licensing in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by