Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MATLAB try and catch issue

I have a problem with the following try and catch code in MATLAB:

fonster='';
while ~(~isempty(fonster) && isnumeric(fonster) && isreal(fonster) && isfinite(fonster) && (fonster == fix(fonster)) && (fonster > 0))
    try
        fonster = input('Välj ett heltal till fönsterplatsen du vill lägga grafen i: ');
    catch
        disp('Du måste mata in ett heltal');
    end
end

It never seems to enter the catch part of the code when entering an invalid input as a string to the input function. Instead it just runs the input all over again and ignores my output message. The wierd part is that I'm using a disp within a catch in another place in my code but this time it just doesn't work.

Here are some running examples:

Input without the try and catch statements:

Välj den fönsterplats du vill lägga grafen i: o
Error using input
Undefined function or variable 'o'.

Error in skapaPlot (line 11)
    fonster = input('Välj den fönsterplats du vill lägga grafen i:
    ');

Error in mainMeny (line 17)
            plot_handles = skapaPlot(plot_handles);

Välj den fönsterplats du vill lägga grafen i:

With try and catch:

Välj ett heltal till fönsterplatsen du vill lägga grafen i: f
Välj ett heltal till fönsterplatsen du vill lägga grafen i: d
Välj ett heltal till fönsterplatsen du vill lägga grafen i: s
Välj ett heltal till fönsterplatsen du vill lägga grafen i: 

Why doesn't it display the disp part?!

like image 713
user1319951 Avatar asked Dec 27 '22 21:12

user1319951


1 Answers

Matlab's input expression evaluator will handle any exceptions raised during input, and immediately redisplay the prompt, and the exception will get cleared. So your catch handler never gets to see any exceptions. If you want to manage things yourself, use instead input(..., 's'), which returns the raw string. You can then perform your evaluation using 'eval()':

try
    inputstring = input('Välj ett heltal till fönsterplatsen du vill lägga grafen i: ', 's');
    fonster = eval(inputstring);
catch
    disp('Du måste mata in ett heltal');
end
like image 187
Josh Greifer Avatar answered Jan 06 '23 09:01

Josh Greifer