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 函数将最后一条警告作为字符串来访问。

也可以为警告分配一个标识字符串。如果警告具有这样的 ID,用户可以启用和禁用此警告,这将在下一节中描述。要为警告分配 ID,只需使用两个字符串参数调用 warning,其中第一个是标识字符串,第二个是实际的警告。请注意,警告 ID 的格式为 "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 标识的警告的当前状态。

也可以将一个包含字段 "state""identifier" 的结构体或结构体数组 warning_struct 作为输入,以达到相同效果。以下示例展示了如何临时禁用一个警告,然后恢复其原始状态:

loglog (-1:10);
## 禁用前一个警告并保存其原始状态
[~, id] = lastwarn ();
warnstate = warning ("off", id);
loglog (-1:10);
## 恢复其原始状态
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)

查询或设置最后一条警告消息。

如果没有输入参数,则返回最后一条警告消息的文本以及可选的警告 ID。

如果指定了 msg,则将最后一条警告消息设置为 msg

如果还指定了 msgid,则将最后一条警告消息的标识符设置为 msgid

参见: warning

 

warning_ids

以下是在 Octave 中预定义的警告 ID 列表。

Octave:abbreviated-property-match

如果 Octave:abbreviated-property-match 警告被启用,则为图形属性的缩写名称打印警告。默认情况下,Octave:abbreviated-property-match 警告被禁用。

Octave:add-to-stack

如果 Octave:add-to-stack 警告被启用,则当 Octave 尝试将目录添加到函数搜索路径时,如果该目录不在搜索路径中,则会打印警告。默认情况下,Octave:add-to-stack 警告被启用。

Octave:array-as-vector

如果 Octave:array-as-vector 警告被启用,则当对数组进行可能被视为向量操作的逻辑运算时,会打印警告。默认情况下,Octave:array-as-vector 警告被禁用。

Octave:array-initial-resize

如果 Octave:array-initial-resize 警告被启用,则当数组从大小 0 增长到非空值时,会打印警告。默认情况下,Octave:array-initial-resize 警告被禁用。

Octave:array-to-scalar

如果 Octave:array-to-scalar 警告被启用,则当对数组进行可能产生标量值的逻辑运算时,会打印警告。默认情况下,Octave:array-to-scalar 警告被禁用。

Octave:assign-as-truth-value

如果 Octave:assign-as-truth-value 警告被启用,则当 ifwhile 条件中使用赋值语句时,会打印警告。默认情况下,Octave:assign-as-truth-value 警告被禁用。

Octave:autoload-relative-file-name

如果 Octave:autoload-relative-file-name 警告被启用,则当自动加载文件使用不安全的相对文件名时,会打印警告。默认情况下,Octave:autoload-relative-file-name 警告被禁用。

Octave:built-in-variable-assignment

如果 Octave:built-in-variable-assignment 警告被启用,则当尝试覆盖内置变量的值时,会打印警告。默认情况下,Octave:built-in-variable-assignment 警告被禁用。

Octave:classdef:array-to-struct

如果 Octave:classdef:array-to-struct 警告被启用,则在需要将类型化数组转换为结构体时会打印警告。默认情况下,Octave:classdef:array-to-struct 警告被禁用。

Octave:classdef:array-to-struct

如果 Octave:classdef:array-to-struct 警告被启用,则在需要将类型化数组转换为结构体时会打印警告。默认情况下,Octave:classdef:array-to-struct 警告被禁用。

Octave:classdef:property-var-arg

如果 Octave:classdef:property-var-arg 警告被启用,则在类属性访问中使用了不安全的 vararginvarargout 时会打印警告。默认情况下,Octave:classdef:property-var-arg 警告被禁用。

Octave:classdef:property-variable

如果 Octave:classdef:property-variable 警告被启用,则当在属性初始化中使用可能不存在的变量时会打印警告。默认情况下,Octave:classdef:property-variable 警告被禁用。

Octave:classdef:superclass-reference

如果 Octave:classdef:superclass-reference 警告被启用,则当对加载前尚未完全定义的超类进行引用时会打印警告。默认情况下,Octave:classdef:superclass-reference 警告被禁用。

Octave:colon-complex-arguments

如果 Octave:colon-complex-arguments 警告被启用,则当为冒号运算符提供复数参数时会打印警告。默认情况下,Octave:colon-complex-arguments 警告被禁用。

Octave:data-file-in-path

如果 Octave:data-file-in-path 警告被启用,则当加载操作找到一个与请求文件名匹配的数据文件而非函数文件时会打印警告。默认情况下,Octave:data-file-in-path 警告被禁用。

Octave:deprecated-function

如果 Octave:deprecated-function 警告被启用,则当调用已弃用的函数时会打印警告。默认情况下,Octave:deprecated-function 警告被启用。

Octave:diagonal-matrix-singular

如果 Octave:diagonal-matrix-singular 警告被启用,则当对角矩阵在解决涉及此矩阵的方程时被当作奇异矩阵处理时会打印警告。默认情况下,Octave:diagonal-matrix-singular 警告被启用。

Octave:divide-by-zero

如果 Octave:divide-by-zero 警告被启用,则当计算非有限值的除法时会打印警告。默认情况下,Octave:divide-by-zero 警告被启用。

Octave:empty-listen-fcn

如果 Octave:empty-listen-fcn 警告被启用,则当尝试从空的监听函数属性中删除元素时会打印警告。默认情况下,Octave:empty-listen-fcn 警告被禁用。

Octave:fortran-indexing

如果 Octave:fortran-indexing 警告被启用,则当使用 Fortran 风格的索引(如按列索引)时会打印警告。默认情况下,Octave:fortran-indexing 警告被禁用。

Octave:function-name-clash

如果 Octave:function-name-clash 警告被启用,则当函数文件名与函数内部声明的函数名不一致时会打印警告。默认情况下,Octave:function-name-clash 警告被禁用。

Octave:future-time-stamp

如果 Octave:future-time-stamp 警告被启用,则当 Octave 发现函数的修改时间戳远在未来时会打印警告。默认情况下,Octave:future-time-stamp 警告被禁用。

Octave:gl-render:data-out-of-range

如果 Octave:gl-render:data-out-of-range 警告被启用,则当 OpenGL 渲染器接收到的数据超出其可接受的范围时会打印警告。默认情况下,Octave:gl-render:data-out-of-range 警告被启用。

Octave:gl-render:missing-data

如果 Octave:gl-render:missing-data 警告被启用,则当 OpenGL 渲染器缺少必要数据来执行绘图操作时会打印警告。默认情况下,Octave:gl-render:missing-data 警告被禁用。

Octave:gl-render:missing-font

如果 Octave:gl-render:missing-font 警告被启用,则当 OpenGL 渲染器在系统中找不到使用的字体时会打印警告。默认情况下,Octave:gl-render:missing-font 警告被禁用。

Octave:gl-render:unknown-element

如果 Octave:gl-render:unknown-element 警告被启用,则当在图形对象中遇到无法识别的 HTML 元素时会打印警告。默认情况下,Octave:gl-render:unknown-element 警告被禁用。

Octave:hermitian-mismatch

如果 Octave:hermitian-mismatch 警告被启用,则当在调用(例如 eig)中检测到埃尔米特/对称矩阵不匹配时会打印警告。默认情况下,Octave:hermitian-mismatch 警告被启用。

Octave:implicit-str-to-num

如果 Octave:implicit-str-to-num 警告被启用,则当将字符串隐式转换为数值时会打印警告。默认情况下,Octave:implicit-str-to-num 警告被禁用。

Octave:infinite-loop

如果 Octave:infinite-loop 警告被启用,则当检测到无限循环时会打印警告。默认情况下,Octave:infinite-loop 警告被禁用。

Octave:inverted-passing

如果 Octave:inverted-passing 警告被启用,则当对 minmax 等函数的调用在传递空矩阵的方式上产生歧义时会打印警告。默认情况下,Octave:inverted-passing 警告被禁用。

Octave:logical-conversion

如果 Octave:logical-conversion 警告被启用,则当从数值进行逻辑转换时需要打印警告时会打印警告。默认情况下,Octave:logical-conversion 警告被禁用。

Octave:magic-colon

如果 Octave:magic-colon 警告被启用,则当使用带有列向量的冒号符号时会打印警告。默认情况下,Octave:magic-colon 警告被禁用。

Octave:matlab-incompatible

如果 Octave:matlab-incompatible 警告被启用,则当可能与 MATLAB 不兼容时会打印警告。默认情况下,Octave:matlab-incompatible 警告被禁用。

Octave:missing-semicolon

如果 Octave:missing-semicolon 警告被启用,则当在函数定义中缺少分号时会打印警告。默认情况下,Octave:missing-semicolon 警告被禁用。

Octave:mixed-string-concat

如果 Octave:mixed-string-concat 警告被启用,则当使用不同引用类型的字符串进行连接时会打印警告。默认情况下,Octave:mixed-string-concat 警告被禁用。

Octave:neg-dim-as-zero

如果 Octave:neg-dim-as-zero 警告被启用,则当负维度被当作零时会打印警告(与 MATLAB 兼容)。默认情况下,Octave:neg-dim-as-zero 警告被禁用。

Octave:noninteger-range-as-index

如果 Octave:noninteger-range-as-index 警告被启用,则当非整数范围值用作索引时会打印警告。默认情况下,Octave:noninteger-range-as-index 警告被禁用。

Octave:not-equal-string

如果 Octave:not-equal-string 警告被启用,则当字符串与另一个不匹配时会打印警告。默认情况下,Octave:not-equal-string 警告被禁用。

Octave:num-to-str

如果 Octave:num-to-str 警告被启用,则当将数值转换为字符串时会打印警告。默认情况下,Octave:num-to-str 警告被禁用。

Octave:possible-matlab-short-circuit-operator

如果 Octave:possible-matlab-short-circuit-operator 警告被启用,则会打印一条警告,提示 &| 操作符在 MATLAB 中可能具有短路行为,而 Octave 始终使用 &&|| 作为短路运算符。默认情况下,Octave:possible-matlab-short-circuit-operator 警告被禁用。

Octave:precedence-change

如果 Octave:precedence-change 警告被启用,则当使用某些可能导致优先级与预期不同的语法时会打印警告。默认情况下,Octave:precedence-change 警告被禁用。

Octave:print:missing-option

如果 Octave:print:missing-option 警告被启用,则当调用 print 函数时缺少期望的选项时会打印警告。默认情况下,Octave:print:missing-option 警告被禁用。

Octave:raise

如果 Octave:raise 警告被启用,则当 warning 函数被 warning ("error", ...) 调用时会打印警告。默认情况下,Octave:raise 警告被禁用。

Octave:recursive-path-search

如果 Octave:recursive-path-search 警告被启用,则当 addpath 使用了双尾部斜杠时会发出警告。默认情况下,Octave:recursive-path-search 警告被启用。

Octave:remove-init-dir

path 函数会更改 Octave 用于查找函数的搜索路径。可以将路径设置为排除 Octave 自身内置函数的值。如果 Octave:remove-init-dir 警告被启用,则当 path 函数的使用方式可能导致 Octave 无法正常工作时,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 警告被启用,则当 switch 标签不是常量或常量表达式时,Octave 会打印一条警告。默认情况下,Octave:variable-switch-label 警告被禁用。


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4