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.
Первый вызов использует шаблон шаблон и дополнительные необязательные аргументы для отображения сообщения в потоке
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.
С двумя аргументами также установить последний идентификатор сообщения на 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). Преобразование удаляет ограничения доступа к объекту и делает свойства private и protected видимыми. По умолчанию предупреждение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включено, предупреждение печатается, когда происходит неявное преобразование полного, одиночного массива во время создания разреженного массива. По умолчанию предупреждение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 выведет предупреждение, если метка переключателя не является константой или выражением константы. По умолчанию предупреждение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/v9.2.0/Issuing-Warnings.html