如果发生错误,如何跳过`for`循环索引

时间:2016-08-18 18:45:56

标签: matlab for-loop error-handling skip conditional-breakpoint

在Matlab中,如果发生错误,我如何跳过某个for循环索引和continue到下一个索引?请注意,我不知道哪个for循环索引会导致错误发生。

错误: Too many outputs requested. Most likely cause is missing [] around left hand side that has a comma separated list expansion

我们假设k = 5时发生错误。 如何将for循环跳转索引k = 5continue设为k = 6

for k = 1:10
    do stuff
    if error occurs
       skip k that causes error
       go to next k
    end
end

3 个答案:

答案 0 :(得分:2)

您可以使用 try 来实现此目的!

for k = 1:10
        %do stuff
        try
         % portion of the code where error can occur
        end
end

答案 1 :(得分:1)

如果您不知道哪个k正在使用错误:

for i=1:10
try
    %do stuff;
catch
    warning('some error');
end

如果你知道k,可以采用一种简单的方法:

for k = 1:10
    if k==6
    else
        disp(k);
    end
end

如果您已经知道导致错误的k

for k = [1:5 7:10]
        disp(k);
end

答案 2 :(得分:0)

如果你需要一个特定长度的向量,否则你会得到一个错误,有两种好方法可以处理。

1)使用try-catch。

2)进行预范围检查,例如。 if (length(data)<2), continue;

如果只有一次可以选择错误(1)或(2)。最好选择与其余代码匹配的方式。如果错误可能发生在代码中的多个位置,并且需要在所有这些中以相同的方式处理,请使用(1)。这样您就可以在同一个地方处理所有错误。

据我所知,在如何处理异常方面存在很多不同的意见(我用更通用的名称“Exception”来引用MATLAB错误)。一个C程序员可能会说稀疏地使用Exceptions,而Java程序员会更频繁地使用它们。然而,Java中没有 goto 关键字,并且C程序员可能会在很多地方使用 goto 处理“异常情况”,即使它被认为是不好的做法过多地使用转到关键字。如您所见,有很多方法可以进行错误处理。我们可以提供不同的选择,但最终它将永远是您的选择(抱歉!)。