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 (идентификатор, шаблон, …)
-
Вывести сообщение об ошибке и остановить выполнение файла m.
Форматирует необязательные аргументы под управлением строки шаблона шаблон по тем же правилам, что и семейство функций
printf(см. Форматированный вывод), и выводит полученное сообщение в потокstderr. Сообщение предваряется строкой «ошибка: ».Вызов
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, "локально")
-
Запрос или установка внутренней переменной, которая контролирует, будет ли 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/v5.2.0/Raising-Errors.html