4

我对 MATLAB 中的以下 try and 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:

尝试并抓住:

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 部分?!

4

1 回答 1

10

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
于 2012-07-09T09:22:50.847 回答