Spec-Zone.ru › Octave 9

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.

См. также: warning, lasterror, lasterr.

Функции, распространяемые вместе с 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, но файл удаётся обнаружить в пути поиска файлов path Octave. Предупреждение может указывать на то, что используется не тот целевой файл, который предполагал программист. По умолчанию предупреждение 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-matrix
Octave: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:sparse:double-conversion

Если предупреждение Octave:sparse:double-conversion включено, при создании разреженного массива выводится предупреждение о неявном преобразовании полного массива типа single. По умолчанию предупреждение Octave:sparse:double-conversion включено.

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 выдаёт предупреждение, если метка switch не является константой или константным выражением. По умолчанию предупреждение Octave:variable-switch-label отключено.

© 1996–2026 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/v9.4.0/Issuing-Warnings.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API