如果发生错误,如何在 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 !
我在 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 !