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 (template, …) ¶
- : warning (id, template, …) ¶
- : warning ("on", id) ¶
- : warning ("off", id) ¶
- : warning ("error", id) ¶
- : warning ("query", id) ¶
- : warning (state, id, "local") ¶
- : warning (warning_struct) ¶
- : warning_struct = warning (…) ¶
- : warning (state, mode) ¶
-
Отобразить сообщение предупреждения или управлять поведением системы предупреждений Octave.
Первый вызов использует шаблон template и дополнительные необязательные аргументы для отображения сообщения в потоке
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");Второй вызов предназначен для изменения и/или запроса состояния предупреждений. Первый входной аргумент должен быть строкой state (
"on","off","error", или"query") за которым следует необязательный идентификатор предупреждения id или"all"(по умолчанию).Необязательный выходной аргумент warning_struct — структура или массив структур с полями
"state"и"identifier". Аргумент state может принимать следующие значения:"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.Уровень подробности системы предупреждений также может регулироваться двумя режимами mode:
"backtrace":-
включить/отключить отображение трассировки стека после сообщения предупреждения
"verbose":включить/отключить отображение дополнительной информации после сообщения предупреждения
В этом случае аргумент state может быть только
"on"или"off".Примечание о реализации: для совместимости с MATLAB, управляющие последовательности в template (например,
"\n"=> новая строка) обрабатываются независимо от того, определен ли template с одинарными кавычками, до тех пор, пока не будет двух или более входных аргументов. Для отключения расширения управляющих последовательностей используйте два обратных слэша перед последовательностью (например,"\\n") или используйте функциюregexptranslate.См. также: warning_ids, lastwarn, error.
- : [msg, msgid] = lastwarn () ¶
- : lastwarn (msg) ¶
- : lastwarn (msg, msgid) ¶
-
Запрос или установка последнего сообщения предупреждения.
При вызове без входных аргументов вернуть последнее сообщение предупреждения и идентификатор сообщения.
С одним аргументом установить последнее сообщение предупреждения на msg.
С двумя аргументами также установить последний идентификатор сообщения на msgid.
Функции, распространяемые с 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 выведет предупреждение, когда директория пакета (например, +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: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, но может найти файл в списке поискаpathOctave. Предупреждение может указывать на использование целевого файла, отличного от предполагаемого программистом. По умолчанию предупреждениеOctave:data-file-in-pathвключено. Octave:datevec:date-format-spec-
Если предупреждение
Octave:datevec:date-format-specвключено, выводится предупреждение, если спецификация формата даты содержит сомнительные спецификаторы даты или времени. Типичными плохими шаблонами являются использование заглавных букв для спецификаторов даты или строчных букв для спецификаторов времени. По умолчанию предупреждениеOctave:datevec:date-format-specвключено. 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. По умолчанию предупреждение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:pow2:imaginary-ignored-
Если предупреждение
Octave:pow2:imaginary-ignoredвключено, выводится предупреждение, если любой из входных параметровpow2является комплексным. По умолчанию предупреждениеOctave:pow2:imaginary-ignoredвключено. 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–2023 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/v8.1.0/Issuing-Warnings.html