#matlab #file #exception #fopen
#matlab #файл #исключение #fopen
Вопрос:
Почему fopen
не выдает исключение, когда имя файла или путь не существует?
in_path = 'pqlcnaf8765mlr9f6lf2;
try
in_file_id = fopen(in_path,'r');
catch
error('Problem with input file.')
end
in_path
Не существует. Вызов возвращает in_file_id
значение -1
, но исключение не генерируется. Кто-нибудь знает почему?
Ответ №1:
Он не предназначен для создания исключения, как указано в документации:
If fopen cannot open the file, it returns -1.
Вам нужно разработать свой код таким образом, чтобы генерировать исключение, которое вы хотите:
in_path = 'pqlcnaf8765mlr9f6lf2;
in_file_id = fopen(in_path,'r');
if in_file_id == -1
error('Problem with input file.')
end
Редактировать
Re: Ссылка в 1-м комментарии -> показывает, как обращаться с try catch
блоком. Выдает ошибку из-за fread
строки. Вы могли бы сделать то же самое в своем коде:
try
in_file_id = fopen(in_path,'r');
fread(in_file_id);
catch
error('Problem with input file.')
end
Сказав это, я не думаю, что ссылка является хорошим примером того, как обращаться с несуществующим файлом.
Комментарии:
1. Что насчет этой ссылки: se.mathworks.com/help/matlab/matlab_prog /… . Это меня смутило (и все еще смущает). Спасибо.
2. И еще кое-что. Как мне узнать, предназначена ли функция для выдачи каких-либо ошибок? Например, выдает audioinfo , но где это задокументировано?
3. Большинство ошибок являются ошибками времени выполнения. Помимо этого, написано множество функций,
C-style
в которых вы получаете код ошибки. Функции предназначены для выдачи только в том случае, если ввод неверен. В коде MATLAB не так много явных бросков. Полную спецификацию можно найти в документе.4. Итак,
fread
выдает, ноfopen
не делает. :-/ И документация для этого по-прежнему остается загадкой.5. Это, как говорит @patrik,
fopen
не выдает ошибку, потому что входные данные правильные. Таким образом, вы не создаете ошибку на стороне программирования, но файл не существует, отсюда ошибка в стиле C (-1
).fread
Выдает ошибку, потому что ввод данных, которые являются-1
(не целым числом), является неправильным вводом, следовательно, ошибка на стороне программирования.