12.1.1 Вызов ошибок
Наиболее распространённое использование ошибок — проверка входных аргументов функций. Следующий пример вызывает функцию error , если функция f вызывается без входных аргументов.
function f (arg1)
if (nargin == 0)
error ("not enough input arguments");
endif
endfunction Когда вызывается функция error, она выводит заданное сообщение и возвращается к приглашению Octave. Это означает, что никакой код, следующий за вызовом error, не будет выполнен.
Также можно присвоить строку идентификации ошибке. Если у ошибки есть такой идентификатор, пользователь может перехватить эту ошибку, как будет описано в следующем разделе. Для присвоения идентификатора ошибке просто вызовите error с двумя строковыми аргументами, где первый — строка идентификации, а второй — фактическая ошибка. Обратите внимание, что идентификаторы ошибок имеют формат "NAMESPACE:ERROR-NAME". Пространство имён "Octave" используется для собственных ошибок Octave. Любая другая строка доступна в качестве пространства имён для собственных ошибок пользователя.
- : error (шаблон, …) ¶
- : error (id, шаблон, …) ¶
-
Выводит сообщение об ошибке и останавливает выполнение m-файла.
Форматирует необязательные аргументы под управлением строки шаблона шаблон по тем же правилам, что и функции семейства
printf(см. Форматированный вывод), и выводит результирующее сообщение в потокstderr. Сообщение предваряется строкой «error: ».Вызов
errorтакже устанавливает внутреннее состояние ошибки Octave таким образом, что управление вернётся на верхний уровень без оценки дальнейших команд. Это полезно для прерывания выполнения функций или скриптов.Если сообщение об ошибке не заканчивается символом новой строки, Octave выведет трассировку всех вызовов функций, приведших к ошибке. Например, при заданных следующих определениях функций:
function f () g (); end function g () h (); end function h () nargin == 1 || error ("nargin != 1"); endвызов функции
fприведет к списку сообщений, которые помогут вам быстро найти точное местоположение ошибки:f () error: nargin != 1 error: called from: error: h at line 1, column 27 error: g at line 1, column 15 error: f at line 1, column 15
Если сообщение об ошибке заканчивается символом новой строки, Octave выведет сообщение, но не отобразит сообщения трассировки, так как передаст управление на верхний уровень. Например, изменение сообщения об ошибке в предыдущем примере так, чтобы оно заканчивалось новой строкой, заставит Octave вывести только одно сообщение:
function h () nargin == 1 || error ("nargin != 1\n"); end f () error: nargin != 1Входная строка NULL ("") в функцию
errorбудет проигнорирована, и код продолжит выполнение так, как будто оператор был NOP. Это сделано для совместимости с MATLAB. Это также позволяет написать код, например,err_msg = ""; if (CONDITION 1) err_msg = "CONDITION 1 found"; elseif (CONDITION2) err_msg = "CONDITION 2 found"; … endif error (err_msg);
который остановит выполнение только в том случае, если была обнаружена ошибка.
Примечание по реализации: для совместимости с MATLAB последовательности экранирования в шаблоне (например,
"\n"=> новая строка) обрабатываются независимо от того, определён ли шаблон с одиночными кавычками, при условии, что имеется два или более входных аргумента. Чтобы отключить расширение последовательностей экранирования, используйте второй обратный слэш перед последовательностью (например,"\\n") или используйте функциюregexptranslate.
Поскольку использование ошибок обычно связано с проблемами входных данных функции, Octave поддерживает функции для упрощения такого кода. Когда вызывается функция print_usage, она считывает текст справки вызывающей функции print_usage, и представляет полезную ошибку. Если текст справки написан в формате Texinfo, то возможно вывести сообщение об ошибке, содержащее только прототипы функций, как описано в @deftypefn разделах справки. Если текст справки не написан в формате Texinfo, то сообщение об ошибке содержит весь текст справки.
Рассмотрим следующую функцию.
## -*- texinfo -*-
## @deftypefn {} f (@var{arg1})
## Function help text goes here…
## @end deftypefn
function f (arg1)
if (nargin == 0)
print_usage ();
endif
endfunction При вызове без входных аргументов она генерирует следующую ошибку.
f () -| error: Invalid call to f. Correct usage is: -| -| -- f (ARG1) -| -| -| Additional help for built-in functions and operators is -| available in the online version of the manual. Use the command -| 'doc <topic>' to search the manual index. -| -| Help and information about Octave is also available on the WWW -| at https://www.octave.org and via the help@octave.org -| mailing list.
- : print_usage () ¶
- : print_usage (имя) ¶
-
Выводит сообщение об использовании функции имя.
При вызове без входных аргументов функция
print_usageотображает сообщение об использовании текущей выполняемой функции.См. также: help.
- : beep () ¶
-
Издает звуковой сигнал (или визуальный звонок).
Эта функция отправляет символ тревоги
"\a"в терминал. В зависимости от конфигурации пользователя это может привести к звуковому сигналу, визуальному звонку или отсутствию каких-либо действий.
- : val = beep_on_error () ¶
- : old_val = beep_on_error (new_val) ¶
- : beep_on_error (new_val, "local") ¶
-
Запрос или установка внутренней переменной, которая управляет тем, будет ли Octave пытаться прозвонить звонок терминала перед выводом сообщения об ошибке.
При вызове изнутри функции с опцией
"local", переменная изменяется локально для функции и любых вызываемых подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v7.2.0/Raising-Errors.html