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符id允许用户启用或禁用此标识符符号的警告。消息标识符是形式的字符串"NAMESPACE:WARNING-NAME"。Octave自己的警告使用"Octave"命名空间(详见warning_ids). 例如:

warning ("MyNameSpace:check-something",
         "foo: maybe something wrong here");

第二个调用形式用于更改和/或查询警告的状态。第一个输入参数必须是字符串state("on","off", "error""query"),后面是可选的警告ID符id或默认的"all"

可选输出参数warning_struct是具有字段的结构体或结构体数组"state""identifier"这里的state参数可能具有以下值:

"on"|"off":

启用或禁用从标识的警告的显示id并可选择返回其前一个状态stout.

"error":

如果警告ID为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启用,那么当大小大于1x1的数组用作if、while或until语句中的真值时,Octave将报警告。默认情况下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)
  ...

相反

有时,在whileif的条件下编写包含赋值的代码是有用的,例如以下语句

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()函数调用时报警告。这种情况通常发生在PKG_ADD文件中使用autoload()调用时,当PKG_ADD与autoload()命令所引用的.oct文件不在同一目录中时。默认情况下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启用,那么当冒号运算符的三个参数之一(base、increment、limit)为复数值时,将报警告。例如1:3*i将导致报警告。默认情况下Octave:colon-complex-argument警告已启用。

广告
Octave:colon-nonscalar-argument

如果Octave:colon-nonscalar-argument启用,那么当冒号运算符的三个参数之一(base、increment、limit)不是标量时,将报警告。例如1:[3, 5]将导致报警告。默认情况下Octave:colon-nonscalar-argument警告已启用。

广告
Octave:data-file-in-path

如果Octave:data-file-in-path启用,那么当Octave未找到文件操作的目标时会报警告,例如loadfopen直接,但能够在Octave的搜索中找到文件path对于文件。该警告可能表示使用了与程序员预期不同的文件目标。默认情况下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启用,那么那么如果输入模式是字符数组而不是字符串或字符串元胞数组,则擦除函数将报警告。默认情况下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:Infwhile (1)。默认情况下Octave:infinite-loop警告已启用。

广告
Octave:language-extension

使用八维语言特有的函数时打印警告,这些函数可能仍在中缺失MATLAB。默认情况下Octave:language-extension警告被禁用。这里的--traditional--braindeadOctave的启动参数也可能有用,详见命令行参数.

广告
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启用,那么如果当前字体没有为aused字符提供字形,Octave将打印警告。默认情况下Octave:missing-glyph警告已启用。

广告
Octave:missing-semicolon

如果Octave:missing-semicolon启用,那么Octave将在函数定义中的语句未结束insemicolon时报警告。默认情况下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-matrixOctave: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将警告不要使用非短路操作符&|ifwhile条件内,它们通常从不短路,但在一定条件下使用时会短路。默认情况下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将在switch标签不是常量或常量表达式的情况下打印警告。默认情况下Octave:variable-switch-label警告被禁用。

广告

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

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