try
начало блока try в управляющей структуре try-catch
catch
начало блока catch в управляющей структуре try-catch
Синтаксис
try statements catch statements end
Описание
Управляющая структура try
-catch
может быть использована для управления кодом программы, который может формировать ошибки.
Когда исполняется управляющая структура try
-catch
, то
обычно исполняются только инструкции между ключевыми словами try
и
catch
. Однако, если возникает ошибка во время выполнения любой из этих
инструкций, то ошибка записывается, оставшиеся инструкции вплоть до ключевого слова
catch
пропускаются, и исполняются инструкции между ключевыми словами
catch
и end
, используя режим обработки ошибок по
умолчанию.
Записанная ошибка может быть извлечена с помощью функции lasterror.
Инструкции блока catch
, как и само ключевое слово catch
,
могут быть опущены, если нет альтернативных инструкций.
Заметьте, что можно также использовать функцию execstr
с аргументом 'errcatch'
для обработки ошибок. Это может быть особенно полезным для обработки синтаксических ошибок.
Заметьте также, что управляющая структура try-catch
в некотором роде похожа на:
if execstr("<try instructions>","errcatch")<>0 then <catch instructions> end
Она использует тот же внутренний механизм, что и.
Именно по этой причине или
execstr(...,"errcatch") не могут быть включены в управляющую структуру
try
-catch
. Этот контекст обнаруживается и формируется
особое сообщение об ошибке (эта ошибка отлавливается и хранится как и любая другая ошибка, если на неё поставлена ловушка в блоке try
).
Тем не менее управляющие структуры try
-catch
могут быть вложены друг в друга (см. пример 2 ниже).
Примеры
// Пример 1 file_path=TMPDIR+'/wrong' try u=mopen(file_path,'r') x=mget(10,'c',u) catch disp(['файл '+file_path+ ' нельзя прочитать используя значения по умолчанию для x']) x=1:10 end [error_message,error_number]=lasterror(%t)
// Пример 2 (вложенные структуры try/catch) function nestedtry(a, b) disp("СТАРТ") mprintf("\ta имеет значение: %s\t\tb имеет значение: %s\n",string(a),string(b)) try disp("try 1") try disp("try 2") z=a+1; // ошибка, если значение строковое catch disp("catch 2") t=b+1; // ошибка, если значение строковое end disp("после try 2") catch disp("catch 1") end disp("после try 1 - КОНЕЦ") endfunction nestedtry(1,1) nestedtry("строка",1) nestedtry(1,"строка") nestedtry("строка","строка")
Смотрите также
История
Версия | Описание |
6.0.0 | try and catch are now protected:
Assignments like try=1 or catch=2 are no
longer possible. |
Report an issue | ||
<< then | Управляющая логика | while >> |