Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語

Please note that the recommended version of Scilab is 6.0.0. This page might be outdated.
See the recommended documentation of this function

Справка Scilab >> Scilab > Ключевые слова Scilab > try

try

начало блока try в управляющей структуре try-catch

catch

начало блока catch в управляющей структуре try-catch

Последовательность вызова

try
statements
catch
statements
end

Описание

Управляющая структура try-catch может быть использована для управления кодом программы, который может формировать ошибки.

Когда исполняется управляющая структура try-catch, то обычно исполняются только инструкции между ключевыми словами try и catch. Однако, если возникает ошибка во время выполнения любой из этих инструкций, то ошибка записывается, оставшиеся инструкции вплоть до ключевого слова catch пропускаются, и исполняются инструкции между ключевыми словами catch и end, используя режим обработки ошибок по умолчанию (см. errcatch).

Записанная ошибка может быть извлечена с помощью функции lasterror.

Инструкции блока catch, как и само ключевое слово catch, могут быть опущены, если нет альтернативных инструкций.

Заметьте, что можно также использовать функцию execstr с аргументом 'errcatch' для обработки ошибок. Это может быть особенно полезным для обработки синтаксических ошибок.

Заметьте также, что управляющая структура try-catch в некотором роде похожа на:

if execstr("<try instructions>","errcatch")<>0 then
  <catch instructions>
end

Она использует тот же внутренний механизм, что и errcatch. Именно по этой причине errcatch или 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("строка","строка")

Смотрите также

  • error — сообщение об ошибке
  • execstr — исполняет Scilab-код, заданный в строках
  • if — ключевое слово для условного выполнения
  • lasterror — получение последнего записанного сообщения об ошибке
  • errcatch — перехват ошибок
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Oct 02 14:01:01 CEST 2014