如果发生错误,如何在Matlab中重复循环迭代

时间:2016-04-29 16:34:39

标签: matlab loops iteration continue

我在MATLAB中有这个代码:

for i = 1: n
   a = randi([0 500]);
   function (a);
end

如果在迭代function(a)执行i=k期间出错,程序将停止。有没有办法让程序重复相同的迭代(当出现错误时),使用新值a并继续执行?

2 个答案:

答案 0 :(得分:2)

您的问题的解决方案非常简单。只需使用try, catch

用于调用函数的循环

for i=1:3
    a=randi([0 500]);
    try
        myfunction(a); %Statements that may throw an error
    catch
        %Code that is executed if myfunction throws error
    end
    disp(i) %Proves that the loop continuous if myfunction throws an error
end

<强>功能

function b = myfunction(a)
    b=a;
    error('Error!!!') %Function throws error every time it gets called
end

不尝试输出,抓住

Error using myfunction (line 3)
Error!!!

Error in For_Error (line 6)
    myfunction(a); %Statements that may throw an error

输出try,catch

1

2

3

答案 1 :(得分:1)

我认为Kaspar的答案并没有完全回答你的问题,user3717023。 在Kaspar解决方案中,迭代不会重复,只是简单地跳过(就像使用continue时)。

建议的解决方案

如果您希望MATLAB重复迭代,直到myfunction()成功完成,请使用while。看看这个:

for ii = 1:30
   disp(ii)

   out = 0;
   while(~out)
       disp('Attempt ...')

       try
           out = myfunction(some_arguments);
       catch
           disp('F****ck!')
       end

       pause(1)
   end

   disp('OK !')           
end

如果myfunction返回其输出(如果没有错误则会发生),它将完成while循环。 为自我描述添加了disp的行。

运行示例时添加了pause行以获得整洁的输出。

示例

使用以下myfunction()示例运行上面的代码,以检查此解决方案的工作原理:

function out = myfunction(x)    
    a = randi(2,1,1) - 1;   % a = 0 or a = 1
    if a==0
        error
    else
        out = magic(3);
    end
end

示例输出:

ii =

     1

Attempt ...
F****ck!
Attempt ...
OK !

ii =

     2

Attempt ...
OK !

ii =

     3

Attempt ...
F****ck!
Attempt ...
F****ck!
Attempt ...
F****ck!
Attempt ...
F****ck!
Attempt ...
OK !