错误最常见的用途是检查函数的输入参数。以下示例调用error
函数ift函数f
在没有任何输入参数的情况下调用。
function f (arg1) if (nargin == 0) error ("not enough input arguments"); endif endfunction
当error
函数被调用时,它会打印给定的消息并返回到Octave提示符。这意味着调用后没有代码error
将被执行。
也可以将标识字符串赋值给错误。如果一个错误有这样的ID,用户可以捕捉到这里的错误,这将在下一节中描述。要为错误赋值ID,只需调用error
有两个字符串参数,其中第一个是标识字符串,第二个是实际错误。请注意,错误ID的格式为"NAMESPACE:ERROR-NAME"
。命名空间"Octave"
用于Octave自己的错误。任何其他字符串都可用作用户自身错误的命名空间。
(template, …)
¶(id, template, …)
¶显示错误消息并停止m文件执行。
在模板字符串的控制下设置可选参数的格式template使用与相同的规则printf
函数族(详见格式化输出)并将生成的消息打印在stderr
流动只有在模板字符串后面有其他参数的情况下,才对单引号字符向量进行此格式化。如果没有其他参数,则按字面意思使用模板字符串(即,不解释单引号字符向量中的任何转义序列)。消息前缀为‘error: ’.
可选的 id 参数允许程序员用一个特定ID标记一个错误
这样用户可以稍后收到它(用
lasterr
或 lasterror
)并且知道错误的来源。
ID必须包含至少一个冒号 (':'
)
且必须不包含任何空格字符。它必须是一个
"NAMESPACE:ERROR-NAME"
形式的字符串。 Octave 自身的错误使用
"Octave"
命名空间 (详见 error_ids
).
例如:
error ("MyNameSpace:wrong-type-argument", "fcn_name: argument should be numeric");
调用error
还设置Octave的内部错误状态,使控制返回到顶级,而不评估任何进一步的命令。这对于中止函数或脚本非常有用。
如果错误消息没有以换行符结束,Octave将打印导致错误的所有函数调用的回溯。例如,给定以下函数定义:
function f () g (); end function g () h (); end function h () nargin == 1 || error ("nargin != 1"); end
调用函数f
将生成一个消息列表,帮助您快速找到错误的确切位置:
f () error: nargin != 1 error: called from: error: h at line 1, column 27 error: g at line 1, column 15 error: f at line 1, column 15
如果错误消息以换行符结束,Octave将打印消息,但不会显示任何回溯消息,因为它将控制返回到顶级。例如,将上一个示例中的错误消息修改为以换行符结尾会导致Octave只打印一条消息:
function h () nargin == 1 || error ("nargin != 1\n"); end f () error: nargin != 1
输入到的空字符串(“”)error
将被忽略,并且代码将继续运行,就像该语句是NOP一样。这是为了与兼容MATLAB。它还使编写代码成为可能,例如
err_msg = ""; if (CONDITION 1) err_msg = "CONDITION 1 found"; elseif (CONDITION2) err_msg = "CONDITION 2 found"; ... endif error (err_msg);
只有在查找错误时才停止执行。
支持说明:为了与兼容MATLAB,中的escapesequencestemplate(例如"\n"
=>换行符),而不管是否template已经用单引号定义,只要有两个或多个输入参数。可禁用的转义序列扩展在序列之前使用第二个反斜杠(例如"\\n"
)或使用regexptranslate
作用
因为在函数输入出现错误时使用错误是很常见的,Octave支持简化此类代码的函数。当print_usage
函数被调用时,它读取函数调用的帮助文本print_usage
,并显示了一个有用的错误。如果帮助文本是用Texinfo编写的,则可能会显示一条错误消息,其中只包含函数原型,如@deftypefn
帮助文本的部分。如果帮助文本不是用Texinfo编写的,则错误消息包含整个帮助消息。
考虑以下函数。
## -*- texinfo -*- ## @deftypefn {} f (@var{arg1}) ## Function help text goes here... ## @end deftypefn function f (arg1) if (nargin == 0) print_usage (); endif endfunction
当在没有输入参数的情况下调用它时,会返回以下错误。
f () -| error: Invalid call to f. Correct usage is: -| -| -- f (ARG1) -| -| -| Additional help for built-in functions and operators is -| available in the online version of the manual. Use the command -| 'doc <topic>' to search the manual index. -| -| Help and information about Octave is also available on the WWW -| at https://www.octave.org and via the help@octave.org -| mailing list.
()
¶(name)
¶打印函数的使用消息name.
当在没有输入参数的情况下调用时print_usage
函数显示当前正在执行的函数的使用消息。
详见: help.
()
¶扬声器发出嘟嘟声(或可视铃声)。
此函数发送报警字符"\a"
到终端。根据用户的配置,这可能会返回可听见的嘟嘟声、可视铃声,或者什么都不返回。
val =
beep_on_error ()
¶old_val =
beep_on_error (new_val)
¶old_val =
beep_on_error (new_val, "local")
¶查询或设置内部变量,该变量控制Octave在打印错误消息之前是否尝试振铃终端。
当从具有的函数内部调用时"local"
参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2