12.2.1 Выдача предупреждений
Выдать предупреждение можно из любого кода, используя функцию warning. В самом простом виде, функция warning принимает в качестве входного аргумента строку, описывающую предупреждение. Например, следующий код проверяет, является ли переменная «a» неотрицательной, и если нет, выдает предупреждение и устанавливает «a» в ноль.
a = -1;
if (a < 0)
warning ("'a' must be non-negative. Setting 'a' to zero.");
a = 0;
endif
-| 'a' must be non-negative. Setting 'a' to zero. Поскольку предупреждения не являются фатальными для работающей программы, поймать предупреждение с помощью оператора try или аналогичного невозможно. Однако получить последнее предупреждение в виде строки можно, используя функцию lastwarn.
Также можно присвоить строку идентификатора предупреждению. Если у предупреждения есть такой идентификатор, пользователь может включить или выключить это предупреждение, как будет описано в следующем разделе. Чтобы присвоить идентификатор предупреждению, просто вызовите warning с двумя строковыми аргументами, где первый — строка идентификатора, а второй — само предупреждение. Обратите внимание, что идентификаторы предупреждений имеют формат "NAMESPACE:WARNING-NAME". Пространство имен "Octave" используется для собственных предупреждений Octave. Любая другая строка может быть использована как пространство имен для пользовательских предупреждений.
- : warning (шаблон, …)
- : warning (id, шаблон, …)
- : warning ("вкл", id)
- : warning ("выкл", id)
- : warning ("ошибка", id)
- : warning ("запрос", id)
- : warning (состояние, id, "локально")
- : warning (структура_предупреждения)
- : структура_предупреждения = warning (…)
- : warning (состояние, режим)
-
Отображает сообщение об ошибке или контролирует поведение системы предупреждений Octave.
Первый способ использования использует шаблон шаблон и дополнительные аргументы для отображения сообщения в потоке
stderr. Сообщение форматируется по тем же правилам, что и функции семействаprintf(см. Форматированный вывод) и предваряется строкой «предупреждение: ». Вы должны использовать эту функцию, когда хотите сообщить пользователю о необычном состоянии, но только тогда, когда для вашей программы имеет смысл продолжать работу. Например:warning ("foo: maybe something wrong here");Если сообщение о предупреждении не заканчивается символом новой строки, Octave выведет трассировку всех вызовов функций, приведших к предупреждению. Если сообщение о предупреждении заканчивается символом новой строки, Octave подавит сообщения об отслеживании, вернув управление в верхний уровень. Более подробную информацию и примеры см. в разделе error.
Необязательный идентификатор предупреждения id позволяет пользователям включать или выключать предупреждения, помеченные этим идентификатором. Идентификатор сообщения — это строка вида
"NAMESPACE:WARNING-NAME". Собственные предупреждения Octave используют пространство имен"Octave"(см. warning_ids). Например:warning ("MyNameSpace:check-something", "foo: maybe something wrong here");Второй способ предназначен для изменения и/или запроса состояния предупреждений. Первый входной аргумент должен быть строкой состояние (
"on","off","error", или"query") за которой необязательно следует идентификатор предупреждения id или"all"(значение по умолчанию).Необязательный выходной аргумент структура_предупреждения — это структура или массив структур с полями
"state"и"identifier". Аргумент состояние может иметь следующие значения:-
"on"|"off": -
Включить или выключить отображение предупреждений, идентифицированных по id, и необязательно вернуть их предыдущее состояние stout.
-
"error": -
Преобразовать предупреждения, идентифицированные по id, в ошибки и необязательно вернуть их предыдущее состояние stout.
-
"query": Вернуть текущее состояние предупреждений, идентифицированных по id.
Структура или массив структур структура_предупреждения с полями
"state"и"identifier"может быть предоставлена в качестве входных данных для достижения эквивалентных результатов. Следующий пример показывает, как временно отключить предупреждение и затем восстановить его первоначальное состояние:loglog (-1:10); ## Disable the previous warning and save its original state [~, id] = lastwarn (); warnstate = warning ("off", id); loglog (-1:10); ## Restore its original state warning (warnstate);Если задан конечный аргумент
"local", то состояние предупреждения будет установлено временно до конца текущей функции. Изменения в состояниях предупреждений, заданных локально, влияют на текущую функцию и все функции, вызываемые из текущего контекста. Предыдущее состояние предупреждения восстанавливается при возврате из текущей функции. Опция"local"игнорируется, если используется в рабочем пространстве верхнего уровня.Без входных аргументов
warning ()эквивалентноwarning ("query", "all"), за исключением того, что при отсутствии выходного аргумента состояние предупреждений отображается вstderr.Уровень подробности системы предупреждений также может быть контролируется двумя режимами режим:
-
"backtrace": -
включить/выключить отображение стека вызовов после сообщения о предупреждении
-
"verbose": включить/выключить отображение дополнительной информации после сообщения о предупреждении
В этом случае аргумент состояние может быть только
"on"или"off".Примечание по реализации: для совместимости с MATLAB, управляющие последовательности в шаблоне (например,
"\n"=> новая строка) обрабатываются независимо от того, определен ли шаблон с одинарными кавычками, до тех пор, пока существует два или более входных аргумента. Чтобы отключить обработку управляющих последовательностей, используйте двойной обратный слэш перед последовательностью (например,"\\n") или используйте функциюregexptranslate.См. также: warning_ids, lastwarn, error.
-
- : [сообщение, идентификатор] = lastwarn ()
- : lastwarn (сообщение)
- : lastwarn (сообщение, идентификатор)
-
Запрос или установка последнего сообщения о предупреждении.
Когда вызывается без входных аргументов, возвращает последнее сообщение о предупреждении и идентификатор сообщения.
С одним аргументом устанавливает последнее сообщение о предупреждении в сообщение.
С двумя аргументами также устанавливает идентификатор последнего сообщения.
Функции, распространяемые с Octave, могут выдавать следующие предупреждения.
Octave:abbreviated-property-match-
По умолчанию предупреждение
Octave:abbreviated-property-matchвключено. Octave:addpath-pkg-
Если предупреждение
Octave:addpath-pkgвключено, Octave будет предупреждать, когда директория пакета (т.е., +имя_пакета) добавляется вpath. Как правило, в путь загрузки следует добавлять только родительскую директорию, содержащую директорию пакета. По умолчанию предупреждениеOctave:addpath-pkgвключено. Octave:array-as-logical-
Если предупреждение
Octave:array-as-logicalвключено, Octave будет предупреждать, когда массив размером больше 1x1 используется в качестве значения истинности в операторе if, while или until. По умолчанию предупреждениеOctave:array-as-logicalотключено. Octave:array-to-scalar-
Если предупреждение
Octave:array-to-scalarвключено, Octave будет предупреждать, когда происходит неявное преобразование массива в скалярное значение. По умолчанию предупреждениеOctave:array-to-scalarотключено. Octave:array-to-vector-
Если предупреждение
Octave:array-to-vectorвключено, Octave будет предупреждать, когда происходит неявное преобразование массива в векторное значение. По умолчанию предупреждениеOctave:array-to-vectorотключено. Octave:assign-as-truth-value-
Если предупреждение
Octave:assign-as-truth-valueвключено, выводится предупреждение для операторов, подобныхif (s = t) …
поскольку такие операторы не являются распространёнными, и скорее всего, предполагалось написать
if (s == t) …
вместо этого.
В некоторых случаях полезно писать код, содержащий присваивания внутри условия оператора
whileилиif. Например, операторы, подобныеwhile (c = getc ()) …
распространены в программировании на языке C.
Можно избежать всех предупреждений о таких операторах, отключив предупреждение
Octave:assign-as-truth-value, но это может также привести к пропуску реальных ошибок, например,if (x = 1) # intended to test (x == 1)! …
В таких случаях можно подавить предупреждения для определённых операторов, записав их с дополнительной парой скобок. Например, запись предыдущего примера как
while ((c = getc ())) …
позволит избежать вывода предупреждения для данного оператора, при этом позволяя Octave выдавать предупреждения о других присваиваниях, используемых в контексте условных операторов.
По умолчанию предупреждение
Octave:assign-as-truth-valueвключено. Octave:autoload-relative-file-name-
Если предупреждение
Octave:autoload-relative-file-nameвключено, Octave будет предупреждать при разборе вызовов функции autoload() с относительными путями к файлам функций. Это обычно происходит при использовании вызовов autoload() в файлах PKG_ADD, когда файл PKG_ADD не находится в той же директории, что и файл .oct, на который ссылается команда autoload(). По умолчанию предупреждениеOctave:autoload-relative-file-nameвключено. Octave:built-in-variable-assignment-
По умолчанию предупреждение
Octave:built-in-variable-assignmentвключено. Octave:classdef-to-struct-
Если предупреждение
Octave:classdef-to-structвключено, выводится предупреждение, когда объект classdef принудительно преобразуется в структуру с помощьюstruct (CLASSDEF_OBJ). Преобразование удаляет ограничения доступа к объекту и делает видимыми частные и защищённые свойства. По умолчанию предупреждениеOctave:classdef-to-structвключено. Octave:colon-complex-argument-
Если предупреждение
Octave:colon-complex-argumentвключено, выводится предупреждение, когда один из трёх аргументов оператора двоеточия (основание, приращение, предел) является комплексным значением. Например,1:3*iвызовет вывод предупреждения. По умолчанию предупреждениеOctave:colon-complex-argumentвключено. Octave:colon-nonscalar-argument-
Если предупреждение
Octave:colon-nonscalar-argumentвключено, выводится предупреждение, когда один из трёх аргументов оператора двоеточия (основание, приращение, предел) не является скаляром. Например,1:[3, 5]вызовет вывод предупреждения. По умолчанию предупреждениеOctave:colon-nonscalar-argumentвключено. Octave:data-file-in-path-
Если предупреждение
Octave:data-file-in-pathвключено, выводится предупреждение, когда Octave не находит целевого объекта для файловой операции, напримерloadилиfopen, но может найти файл в списке поискаpathOctave. Предупреждение может указывать на использование целевого файла, отличного от задуманного программистом. По умолчанию предупреждениеOctave:data-file-in-pathвключено. Octave:deprecated-function-
Если предупреждение
Octave:deprecated-functionвключено, выводится предупреждение, когда Octave сталкивается с устаревшей функцией, запланированной на удаление из Octave. По умолчанию предупреждениеOctave:deprecated-functionвключено. Octave:deprecated-keyword-
Если предупреждение
Octave:deprecated-keywordвключено, выводится предупреждение, когда Octave сталкивается с устаревшим ключевым словом, запланированным на удаление из Octave. По умолчанию предупреждениеOctave:deprecated-keywordвключено. Octave:deprecated-property-
Если предупреждение
Octave:deprecated-propertyвключено, выводится предупреждение, когда Octave сталкивается с устаревшим свойством графики, запланированным на удаление из Octave. По умолчанию предупреждениеOctave:deprecated-propertyвключено. Octave:eigs:UnconvergedEigenvalues-
Если предупреждение
Octave:eigs:UnconvergedEigenvaluesвключено, функция eigs выведет предупреждение, если количество вычисленных собственных значений меньше количества запрошенных собственных значений. По умолчанию предупреждениеOctave:eigs:UnconvergedEigenvaluesвключено. Octave:empty-index-
Если предупреждение
Octave:empty-indexвключено, Octave будет выдавать предупреждение всякий раз, когда операторы индексирования используются без индекса, например,x(). По умолчанию предупреждениеOctave:empty-indexвключено. Octave:erase:chararray-
Если предупреждение
Octave:erase:chararrayвключено, функция erase выведет предупреждение, если входной шаблон является символьной строкой, а не строкой или массивом ячеек строк. По умолчанию предупреждениеOctave:erase:chararrayвключено. Octave:function-name-clash-
Если предупреждение
Octave:function-name-clashвключено, выводится предупреждение, когда Octave обнаруживает, что имя функции, определённой в файле функции, отличается от имени файла. (Если имена не совпадают, имя, объявленное внутри файла, игнорируется.) По умолчанию предупреждениеOctave:function-name-clashвключено. Octave:future-time-stamp-
Если предупреждение
Octave:future-time-stampвключено, Octave выведет предупреждение, если обнаружит файл функции с отметкой времени, которая находится в будущем. По умолчанию предупреждениеOctave:future-time-stampвключено. Octave:glyph-render-
Если предупреждение
Octave:glyph-renderвключено, Octave выведет предупреждение, если глиф для символа не может быть отображён текущим шрифтом. По умолчанию предупреждениеOctave:glyph-renderвключено. Octave:imag-to-real-
Если предупреждение
Octave:imag-to-realвключено, выводится предупреждение о неявных преобразованиях комплексных чисел в вещественные числа. По умолчанию предупреждениеOctave:imag-to-realотключено. Octave:language-extension-
Вывод предупреждений при использовании функций, уникальных для языка Octave и, возможно, отсутствующих в MATLAB. По умолчанию предупреждение
Octave:language-extensionотключено. Также могут быть полезны параметры запуска Octave --traditional или --braindead, см. Параметры командной строки. Octave:legacy-function-
Если предупреждение
Octave:legacy-functionвключено, выводится предупреждение, когда Octave сталкивается с функцией, которая, по мнению MATLAB, должна быть избегнута. Функция может стать устаревшей в будущем и быть удалена, в этом случае предупреждение изменится наOctave:deprecated-function, а функция будет существовать ещё две версии Octave, прежде чем быть удалена. По умолчанию предупреждениеOctave:legacy-functionвключено. Octave:logical-conversion-
По умолчанию предупреждение
Octave:logical-conversionвключено. Octave:lu:sparse_input-
Если предупреждение
Octave:lu:sparse_inputвключено, Octave будет предупреждать, когда функция lu вызывается со разреженным входом и менее четырьмя выходными аргументами. В этом случае не будут выполняться сохраняющие разреженность перестановки столбцов, и результат может быть неточным. По умолчанию предупреждениеOctave:lu:sparse_inputвключено. Octave:missing-glyph-
Если предупреждение
Octave:glyph-renderвключено, Octave выведет предупреждение, если текущий шрифт не содержит глифа для используемого символа. По умолчанию предупреждениеOctave:missing-glyphвключено. Octave:missing-semicolon-
Если предупреждение
Octave:missing-semicolonвключено, Octave будет предупреждать, когда операторы в определениях функций не заканчиваются точкой с запятой. По умолчанию предупреждениеOctave:missing-semicolonотключено. Octave:mixed-string-concat-
Если предупреждение
Octave:mixed-string-concatвключено, выводится предупреждение при конкатенации смешанных строковых литералов в одинарных и двойных кавычках. По умолчанию предупреждениеOctave:mixed-string-concatотключено. Octave:nearly-singular-matrixOctave:singular-matrix-
Эти предупреждения выводятся, если обратная матрица (почти) вырожденной матрицы. По умолчанию предупреждения
Octave:nearly-singular-matrixиOctave:singular-matrixвключены. Octave:neg-dim-as-zero-
Если предупреждение
Octave:neg-dim-as-zeroвключено, выводится предупреждение для выражений, подобныхeye (-1)
По умолчанию предупреждение
Octave:neg-dim-as-zeroотключено. Octave:noninteger-range-as-index-
По умолчанию предупреждение
Octave:noninteger-range-as-indexвключено. Octave:num-to-str-
Если предупреждение
Octave:num-to-strвключено, выводится предупреждение при неявном преобразовании чисел в их эквиваленты в кодировке UTF-8, когда строки строятся с использованием смешанных строк и чисел в матричной записи. Например,[ "f", 111, 111 ] ⇒ "foo"
вызовет предупреждение, если предупреждение
Octave:num-to-strвключено. По умолчанию предупреждениеOctave:num-to-strвключено. Octave:possible-matlab-short-circuit-operator-
Если предупреждение
Octave:possible-matlab-short-circuit-operatorвключено, Octave будет предупреждать об использовании некороткозамыкающихся операторов&и|внутриifилиwhileусловий. Они обычно не короткозамыкаются, но короткозамыкаются при использовании в условии. По умолчанию предупреждениеOctave:possible-matlab-short-circuit-operatorвключено. Octave:recursive-path-search-
Если предупреждение
Octave:recursive-path-searchвключено, Octave выведет предупреждение, еслиaddpathиспользуется с двойными обратными слешами. По умолчанию предупреждениеOctave:recursive-path-searchвключено. Octave:remove-init-dir
-
Функция
pathизменяет путь поиска, используемый Octave для нахождения функций. Возможно задать путь, исключающий встроенные функции Octave. Если включено предупреждениеOctave:remove-init-dir, Octave выдаст предупреждение, когда функцияpathиспользована таким образом, что это может сделать Octave неработоспособным. По умолчанию предупреждениеOctave:remove-init-dirвключено. Octave:reload-forces-clear-
Если несколько функций загружены из одного файла, Octave должна очистить все функции, прежде чем любая из них сможет быть перезагружена. Если включено предупреждение
Octave:reload-forces-clear, Octave выдаст вам предупреждение, когда это произойдёт, и выведет список дополнительных функций, которые ей необходимо очистить. По умолчанию предупреждениеOctave:reload-forces-clearвключено. Octave:separator-insert-
Вывести предупреждение, если запятые или точки с запятой могут быть автоматически вставлены в матрицах-литералах. По умолчанию предупреждение
Octave:separator-insertотключено. Octave:shadowed-function-
Если включено предупреждение
Octave:shadowed-function, Octave выведет предупреждение, если в путь поиска добавлен путь, содержащий функции, которые скрывают ядровые функции. По умолчанию предупреждениеOctave:shadowed-functionвключено. Octave:single-quote-string-
Вывести предупреждение, если символ одинарной кавычки используется для ввода строковой константы. По умолчанию предупреждение
Octave:single-quote-stringотключено. Octave:sqrtm:SingularMatrix-
По умолчанию предупреждение
Octave:sqrtm:SingularMatrixвключено. Octave:str-to-num-
Если включено предупреждение
Octave:str-to-num, выводится предупреждение об неявном преобразовании строк в их числовые последовательности байтов UTF-8. Например,"abc" + 0 ⇒ 97 98 99
вызывает предупреждение, если включено предупреждение
Octave:str-to-num. По умолчанию предупреждениеOctave:str-to-numотключено. Octave:text_interpreter-
Если включено предупреждение
Octave:text_interpreter, выводится предупреждение, когда свойство"interpreter"объекта текстовой графики устанавливается в недопустимое значение"latex". Даже при включении, сообщение о предупреждении выводится только один раз за сеанс Octave. По умолчанию предупреждениеOctave:glyph-renderвключено. Octave:variable-switch-labelЕсли включено предупреждение
Octave:variable-switch-label, Octave выведет предупреждение, если метка переключения не является константой или выражением константы. По умолчанию предупреждениеOctave:variable-switch-labelотключено.
© 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/v6.4.0/Issuing-Warnings.html