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

How to repeat for loop iteration in Matlab if an error occurred

我在 MATLAB 中有这段代码:

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

function(a) 在迭代 i=k 的执行过程中出现错误时,程序停止。有什么方法可以让程序重复相同的迭代(当出现错误时)并使用新值 a 并继续执行?

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

调用函数的for循环

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

不用try就输出,catch

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

我认为 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 returns 它的输出(如果没有错误就会发生)它完成 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 !