Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2024.1.0 - Русский


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("строка","строка")

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

  • error — сообщает об ошибке во время выполнения
  • execstr — execute Scilab code in strings
  • if — ключевое слово для условного выполнения
  • lasterror — получение последнего записанного сообщения об ошибке

История

ВерсияОписание
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 >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Jun 17 17:55:04 CEST 2024