可以使用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自己的警告。任何其他可用作用户自己警告的命名空间的字符串。
(template, …)
¶(id, template, …)
¶("on", id)
¶("off", id)
¶("error", id)
¶("query", id)
¶(state, id, "local")
¶(warning_struct)
¶warning_struct =
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 ()
¶(msg)
¶(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
启用,那么当大小大于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) ...
相反
有时,在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()函数调用时报警告。这种情况通常发生在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未找到文件操作的目标时会报警告,例如load
或fopen
直接,但能够在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:Inf
或while (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-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将在switch标签不是常量或常量表达式的情况下打印警告。默认情况下Octave:variable-switch-label
警告被禁用。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2