Как я могу продолжить цикл, когда в MATLAB возникает ошибка? - PullRequest
13 голосов
/ 13 сентября 2010

Я конвертирую некоторые файлы .dat в файлы .mat с помощью функции. Я вызываю эту функцию внутри цикла, чтобы преобразовать несколько файлов. В некоторых случаях мой файл .dat поврежден, и функция не может быть преобразована, и возникает ошибка, останавливая цикл.

Теперь мой вопрос: существует ли какая-либо команда, в которой при возникновении ошибки следует пропустить текущее значение (i) в цикле и перейти к следующему значению приращения (в моем случае к следующему файлу)?

1 Ответ

20 голосов
/ 13 сентября 2010

Вы можете сделать это, используя оператор TRY / CATCH вместе с CONTINUE .Поместите в ваш цикл следующее:

try              %# Attempt to perform some computation
  %# The operation you are trying to perform goes here
catch exception  %# Catch the exception
  continue       %# Pass control to the next loop iteration
end

EDIT:

Амро предлагает хорошую идею в своем комментарии ниже.Возможно, вы захотите выдать предупреждение о том, что произошла ошибка и для какого файла, или, возможно, вы даже захотите сохранить список файлов, которые не удалось преобразовать должным образом.Чтобы сделать последнее, вы можете сначала инициализировать пустой массив ячеек перед началом цикла:

failedFiles = {};  %# To store a list of the files that failed to convert

Затем, после того как вы перехватите исключение, но перед тем, как выполнить команду continue, добавьте имя / путьтекущего файла, преобразуемого в список:

...
catch exception
  failedFiles = [failedFiles; {'currentFile.dat'}];
  continue
end

Когда цикл завершен, вы можете посмотреть на failedFiles, чтобы легко увидеть, что не конвертировалось правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...