MATLAB尝试和catch问题
问题描述:
我有以下try和catch代码MATLAB的一个问题:MATLAB尝试和catch问题
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
它似乎永远不会进入一个无效的输入作为一个字符串时,需输入密码的卡脚部分输入功能。相反,它只是重新运行输入并忽略我的输出消息。奇怪的部分是我在我的代码中的另一个地方使用catch中的disp,但这次它不起作用。
下面是一些例子运行:
输入没有try和catch语句:
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:
用try和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:
为什么它不显示DISP部分?!
答
Matlab的输入表达式计算器将处理在输入过程中引发的任何异常,并立即重新显示提示,异常将被清除。所以你的catch处理程序永远不会看到任何异常。如果你想自己管理东西,可以使用input(...,'s'),它返回原始字符串。然后,您可以使用'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