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 (…) ¶
- : 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"(по умолчанию).Необязательный выходной аргумент структура_предупреждения представляет собой структуру или массив структур с полями
"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включено, выводится предупреждение, если для операции, задающей свойство объекта, используется неточная или неоднозначная совпадающая сопоставление. Например, для объекта графики fig со свойством'displayname',get (fig, 'dis')выводит предупреждение, если предупреждение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:charmat-truncated-
Если предупреждение
Octave:charmat-truncatedвключено, при преобразовании матрицы символов с несколькими строками в строку выводится предупреждение. В этом случае интерпретатор Octave сохраняет только первую строку и отбрасывает остальные. По умолчанию, предупреждениеOctave:charmat-truncatedвключено. 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, но может найти файл в списке поиска Octavepathдля файлов. Предупреждение может указывать на использование целевого файла, отличного от предполагаемого программистом. По умолчанию, предупреждение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-option-
Если предупреждение
Octave:deprecated-optionвключено, выдаётся предупреждение при использовании устаревшего параметра или входных данных для функции. По умолчанию, предупреждениеOctave:deprecated-optionвключено. Octave:deprecated-property-
Если предупреждение
Octave:deprecated-propertyвключено, выводится предупреждение при обнаружении устаревшего свойства графики, запланированного на удаление из 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:infinite-loop-
Если предупреждение
Octave:infinite-loopвключено, выводится предупреждение при обнаружении бесконечного цикла, например,for i = 1:Infилиwhile (1). По умолчанию, предупреждениеOctave:infinite-loopвключено. 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: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включено, выводится предупреждение, если массив индексируется диапазоном, содержащим нецелые значения. Например,a = [1 2 3 4 5]; b = 2.2:4.2 ⇒ 1.2 2.2 3.2 a(b) ⇒ 2 3 4
вызывает предупреждение, если включено предупреждение
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включено, выводится предупреждение, если функция квадратного корня матрицыsqrtmвызывается с матрицей ввода, которая является сингулярной. По умолчанию предупреждение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:LaTeX:internal-error-
Если предупреждение
Octave:LaTeX:internal-errorвключено, выводится предупреждение всякий раз, когда рендерер LaTeX для текста на графиках сталкивается с проблемой. По умолчанию предупреждениеOctave:LaTeX:internal-errorвключено. Octave:unimplemented-matlab-functionality-
Если предупреждение
Octave:unimplemented-matlab-functionalityвключено, выводится предупреждение, когда используется конструкция кода MATLAB, которую интерпретатор Octave анализирует как корректную, но для которой Octave еще не реализовал функциональность. По умолчанию предупреждениеOctave:unimplemented-matlab-functionalityвключено. 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/v7.2.0/Issuing-Warnings.html