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

问题描述 投票:3回答:2

我在MATLAB中有这个代码:

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

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

matlab loops iteration continue
2个回答
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
投票

我认为卡斯帕回答并没有完全回答你的问题,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 !
© www.soinside.com 2019 - 2024. All rights reserved.