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: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