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 ("on", id)
- warning ("off", id)
- warning ("error", id)
- warning ("query", id)
- warning (состояние, id, "local")
- warning (warning_struct)
- warning_struct = warning (…)
- warning (состояние, режим)
-
Выводит сообщение о предупреждении или управляет поведением системы предупреждений Octave.
Первый вызов использует шаблон шаблон и дополнительные аргументы для отображения сообщения в потоке
stderr. Сообщение форматируется по тем же правилам, что и функцииprintf(см. Форматированный вывод), и предваряется строкой ‘warning: ’. Используйте эту функцию, когда нужно уведомить пользователя об необычном состоянии, но только когда вашей программе имеет смысл продолжить выполнение. Например: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"(по умолчанию).Необязательный выходной аргумент warning_struct — это структура или массив структур с полями
"state"и"identifier". Аргумент состояние может иметь следующие значения:-
"on"|"off": -
Включить или выключить отображение предупреждений, идентифицированных id, и необязательно вернуть их предыдущее состояние stout.
-
"error": -
Преобразовать предупреждения, идентифицированные id, в ошибки и необязательно вернуть их предыдущее состояние stout.
-
"query": Возвратить текущее состояние предупреждений, идентифицированных id.
Структура или массив структур warning_struct с полями
"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.
-
- [msg, msgid] = lastwarn ()
- lastwarn (msg)
- lastwarn (msg, msgid)
-
Запрос или установка последнего сообщения о предупреждении.
При вызове без входных аргументов возвращаются последнее сообщение о предупреждении и идентификатор сообщения.
С одним аргументом устанавливает последнее сообщение о предупреждении на msg.
С двумя аргументами также устанавливает идентификатор последнего сообщения.
Функции, поставляемые с Octave, могут выдавать следующие предупреждения.
Octave:abbreviated-property-match-
По умолчанию предупреждение
Octave:abbreviated-property-matchвключено. Octave:addpath-pkg-
Если предупреждение
Octave:addpath-pkgвключено, Octave выведет предупреждение, когда директория пакета (например, +package_name) добавляется в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:associativity-change-
Если предупреждение
Octave:associativity-changeвключено, Octave выведет предупреждение о возможных изменениях в значении некоторого кода из-за изменений ассоциативности некоторых операторов. Изменения ассоциативности обычно вводятся для совместимости с MATLAB. По умолчанию предупреждениеOctave:associativity-changeвключено. 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: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:divide-by-zero-
Если предупреждение
Octave:divide-by-zeroвключено, при обнаружении Octave деления на ноль выводится предупреждение. По умолчанию предупреждениеOctave:divide-by-zeroвключено. Octave:eigs:UnconvergedEigenvalues-
Если предупреждение
Octave:eigs:UnconvergedEigenvaluesвключено, функция eigs выведет предупреждение, если количество вычисленных собственных значений меньше, чем количество запрошенных собственных значений. По умолчанию предупреждениеOctave:eigs:UnconvergedEigenvaluesвключено. Octave:erase:chararray-
Если предупреждение
Octave:erase:chararrayвключено, функция erase выведет предупреждение, если входной шаблон является символьной строкой, а не строкой или ячейкой строк. По умолчанию предупреждениеOctave:erase:chararrayвключено. Octave:data-file-in-path-
Если предупреждение
Octave:data-file-in-pathвключено, при отсутствии целевого файла операции (например,loadилиfopen) в прямом доступе, но обнаружении файла в списке поиска Octave, выводится предупреждение. Предупреждение может указывать на использование целевого файла, отличного от предполагаемого программистом. По умолчанию предупреждениеOctave:data-file-in-pathвключено. 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: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: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:nested-functions-coerced-
По умолчанию предупреждение
Octave:nested-functions-coercedвключено. 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:precedence-change-
Если предупреждение
Octave:precedence-changeвключено, Octave выведет предупреждение о возможных изменениях в значении некоторого кода из-за изменений порядка следования некоторых операторов. Изменения порядка следования обычно вводятся для совместимости с MATLAB. По умолчанию предупреждениеOctave:precedence-changeвключено. Octave:recursive-path-search-
По умолчанию предупреждение
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:resize-on-range-error
-
Если предупреждение
Octave:resize-on-range-errorвключено, выводится предупреждение при изменении размера матрицы с помощью индексированного присваивания с индексами, выходящими за текущие границы. По умолчанию предупреждениеOctave:resize-on-range-errorвыключено. Octave:separator-insert-
Выводить предупреждение, если запятые или точки с запятой могут быть автоматически вставлены в литеральные матрицы. По умолчанию предупреждение
Octave:separator-insertвыключено. Octave:shadowed-function-
По умолчанию предупреждение
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: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/v5.2.0/Issuing-Warnings.html