如果发生错误,如何在Matlab中重复循环迭代
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果发生错误,如何在Matlab中重复循环迭代相关的知识,希望对你有一定的参考价值。
我在MATLAB中有这个代码:
for i = 1: n
a = randi([0 500]);
function (a);
end
在迭代function(a)
执行i=k
期间出现错误时,程序停止。有没有办法让程序重复相同的迭代(当有错误时)使用a
的新值并继续执行?
答案
您的问题的解决方案非常简单。只需使用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
另一答案
我认为卡斯帕回答并没有完全回答你的问题,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 !
以上是关于如果发生错误,如何在Matlab中重复循环迭代的主要内容,如果未能解决你的问题,请参考以下文章