Я думаю, что Каспар ответ не точно ответить на ваш вопрос, 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 !
Самый простой способ переписать 'function', чтобы он не вызывал ошибок. – beaker
У вас нет. Другие варианты включают использование цикла while, с инкрементным счетчиком, основанного на успехе 'function' или [' try/catch'] (http://www.mathworks.com/help/matlab/ref/try.html) заявление. – excaza