Есть ли какая-нибудь авторитетная ссылка на то, какие исключения могут быть вызваны встроенными функциями Matlab? - PullRequest
12 голосов
/ 20 января 2011

Например, я хочу поймать исключение «не читать файл при этом пути» из imread (). Я могу сделать это.

imagePath = 'a_picture.jpg';
try
    im = imread(imagePath);
catch exception
    if strcmp(exception.identifier, 'MATLAB:imread:fileOpen')
        fprintf('Couldn''t open %s.\n', imagePath);
        im = [];
    else
        fprintf('Unexpected error (%s): %s\n', ...
                exception.identifier, exception.message);
        throw(exception);
    end
end

Но единственные известные мне способы обнаружения магической строки для сравнения (в данном случае 'MATLAB: imread: fileOpen'):

  1. Вызвать ошибку, перехватить исключение и посмотреть на идентификатор. Но это займет много времени, чтобы сделать это правильно. Например, использует ли Matlab другой идентификатор исключения, если файл существует, но на самом деле это не файл изображения? Как насчет того, если он существует, но у меня нет разрешения на чтение? Что если это каталог?

  2. Посмотрите на исходный код. imread () написан на Matlab, так что это возможно, но не для других функций. И, конечно, imread () вызывает другие функции, которые не написаны в Matlab, и из них могут возникать исключения.

Есть ли какой-нибудь авторитетный способ узнать обо всех исключениях, которые может создать imread ()? Я надеюсь, что это где-то в документации, но я не могу найти это.

Ответы [ 3 ]

1 голос
/ 24 февраля 2011

Нет, нет.

Проблема в том, что даже если бы существовала авторитетная ссылка на то, что данная функция в MatLab генерирует, она могла бы меняться от версии к версии. Поэтому, даже если бы вы могли это сделать, вы, вероятно, не должны.

Я бы рекомендовал проверять только те из них, которые, как вы знаете, вы можете обработать, и генерировать некоторые общие ошибки для других (или повторно использовать то, что дает вам MatLab).


Некоторые комментарии на основе других языков / фреймворков:

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

В Java вы можете указать, какое исключение выдается из какого метода. Затем это проверяется компилятором, и поэтому компилятор может создать авторитетную ссылку. MatLab не имеет такой возможности, поэтому лучшее, что вы можете сделать, это поиск, как указано в других ответах.

0 голосов
/ 04 февраля 2011

Если вы хотите перечислить файлы, чтобы создать собственную ссылку, попробуйте

grep -r "MATLAB:" <matlab root>

вы получите длинный список ... но, похоже, ошибки выдают error() или mexErrMsgIdAndTxt. Эти плюс имена функций позволяют вам быть более конкретными. Хотя довольно медленно.

grep также заметит, что некоторые двоичные файлы совпадают. Поток -a, и он сможет извлечь сообщения об ошибках из многих из них.

0 голосов
/ 29 января 2011

Я ищу это, и я ничего не нашел ... Единственное, что я вижу, это могло бы помочь вам, это проанализировать исходный код imread, что, я не думаю, возможно.Тем не менее, вы всегда можете попытаться увидеть исходный код той же функции в Octave , поскольку он почти одинаков (я полагаю).

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