Выдает исключение, когда файл не найден, в Mathematica - PullRequest
2 голосов
/ 27 февраля 2011

У меня есть функция, которая обрабатывает изображение, путь которого указан пользователем. Я немного новичок в Mathematica, и я не могу найти много на его большой документации. Как я могу выдать исключение при сбое импорта [myFile]? Могу ли я это сделать?

Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 28 февраля 2011

Простой прототип -

Catch[
  Check[img = Import["myFile"], Throw[$Failed], Import::nffil];
  Print["Processing image"]
]

, где вы можете сделать цели Catch и Throw более точными, используя tag s, если это необходимо.

2 голосов
/ 28 февраля 2011

Вы можете использовать Throw[anyExpression] или Throw[anyExpression, exceptionTag], чтобы вызвать исключение с любым выражением.Затем вы можете использовать Catch[your code] или Catch[yourCode,exceptionPattern].Исключения в Mathematica не являются объектами, как, например, в Java, поэтому вы не можете напрямую использовать технику построения иерархий наследования исключений и использовать несколько операторов catch для выбора более специфичных и более общих.Теги исключений необходимы, чтобы придать исключению идентичность, чем-то похожее на имя класса исключения в Java.Throw без второго аргумента вызовет исключение без тега, которое может быть перехвачено Catch без второго аргумента.Если вы серьезно хотите использовать исключения в Mathematica, я бы посоветовал не использовать их, поскольку вы можете легко поймать то, что вы не планировали перехватывать - точно так же, как вы обычно не используете Exception в Java, а предпочли бы создать его подкласс.В Mathematica нет проверенных исключений, поэтому все исключения Mathematica можно считать исключениями времени выполнения.Поскольку второй аргумент Catch является шаблоном, вы можете создавать Catch команды, которые могли бы перехватывать исключения с разными тегами, несколько эмулируя иерархии наследования исключений в Java.Синтаксис также отличается - нет try - вы просто оборачиваете Catch вокруг фрагмента кода, из которого вы можете ожидать исключения.Обратите внимание, что Catch без второго аргумента не будет перехватывать помеченное исключение, в то время как Catch со вторым аргументом не будет перехватывать непомеченное исключение.Если вы хотите и то и другое, вам может понадобиться вложиться как Catch [Catch [code, pattern]].Не существует предложения finally, предоставляемого в качестве встроенного, но его можно эмулировать с помощью пользовательского кода, поскольку в Mathematica можно также программировать конструкции потока управления, используя нестандартную оценку (функции с Hold-атрибутами).так далее).Вы можете найти варианты использования Catch и Throw в документации, здесь на SO сообщениях и в MathGroup, и вы найдете множество хороших примеров.

HTH

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