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

How to skip `for` loop index if an error occurs

在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 = 5continuek = 6

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

如果您不知道哪个 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

您可以使用 try 来达到这个目的!

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

如果您需要特定长度的向量,否则会出现错误,有两种处理方法。

1) 使用try-catch。

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

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

据我所知,在如何处理异常方面有很多不同的意见(我指的是具有更通用名称 "Exception" 的 MATLAB 错误)。 C 程序员可能会说应该稀疏地使用异常,而 Java 程序员会更频繁地使用它们。但是 Java 中没有 goto 关键字,C 程序员可能会使用 goto 来处理 "Exception situation"在许多地方,即使过度使用 goto 关键字被认为是不好的做法。如您所见,有很多方法可以进行错误处理。我们可以提供不同的选择,但最终始终是您的选择(抱歉!)。