当发生报错时,可以使用try
中所述的语句The try Statement。例如,以下代码统计在for
循环中的报错数量:
number_of_errors = 0; for n = 1:100 try ... catch number_of_errors++; end_try_catch endfor
以上示例对所有报错一视同仁。然而,在许多情况下,有必要区分报错,并根据报错采取不同的行动。这里的lasterror
函数返回一个结构体,该结构体包含有关上次发生的报错的信息。例如,可以更改上面的代码以计算与‘*’运算符相关的报错数:
number_of_errors = 0; for n = 1:100 try ... catch msg = lasterror.message; if (strfind (msg, "operator *")) number_of_errors++; endif end_try_catch endfor
或者,lasterror
函数的输出可以在紧接在后面表示的变量中找到catch
关键字,在下面的示例中显示如何将报错重定向为警告:
try ... catch err warning(err.identifier, err.message); ... end_try_catch
identifier
此报错消息的消息标识符
stack
一种结构体,包含有关消息发生位置的信息。如果无法获得信息,这可能是一个空结构体。结构体的字段为:
file
发生报错的文件的名称
name
发生报错的函数的名称
line
发生报错的行号
column
一个可选字段,其中包含发生报错的列号
最后的误差结构体可以通过传递标量结构体来设置,err,作为输入。的任何字段err将设置与上述字段匹配的字段,同时使用默认值初始化任何未指定的字段。
如果lasterror
与"reset"
参数一起调用,所有字段都设置为默认值。
[msg, msgid] =
lasterr ()
¶(msg)
¶(msg, msgid)
¶查询或设置最后一条报错消息。
当在没有输入参数的情况下调用时,返回最后一条报错消息和消息标识符。
使用一个参数,将最后一条报错消息设置为msg.
使用两个参数,还可以设置最后一个消息标识符。
下一个示例统计索引报错。使用函数返回的结构体的字段标识符捕获报错lasterror
.
number_of_errors = 0; for n = 1:100 try ... catch id = lasterror.identifier; if (strcmp (id, "Octave:invalid-indexing")) number_of_errors++; endif end_try_catch endfor
使用Octave分发的函数可能会发出以下报错之一。
Octave:bad-alloc
表示无法赋值内存。
Octave:invalid-context
表示报错是从无法在调用它的作用域中执行的操作生成的。例如,函数print_usage ()
从Octave提示符调用时会引发此报错。
Octave:invalid-fun-call
表示函数的调用方式不正确,例如输入参数的数量报错。
Octave:invalid-indexing
表示数据类型的索引不正确,例如数组的实值索引、结构体中不存在的字段。
Octave:invalid-input-arg
表示使用无效的输入参数调用函数。
Octave:parse-error
表示解释器在解析(阅读)特定的代码时失败。
Octave:undefined-function
表示对未定义的函数的调用。函数可能存在,但Octave无法在搜索路径中找到它。
处理完报错后,可以再次引发报错。当需要检测报错,但程序仍应中止时,这可能很有用。这可以使用rethrow
作用现在可以更改前面的示例来计算与“”相关的报错数*运算符,但如果发生另一种报错,仍然会中止。
number_of_errors = 0; for n = 1:100 try ... catch msg = lasterror.message; if (strfind (msg, "operator *")) number_of_errors++; else rethrow (lasterror); endif end_try_catch endfor
(err)
¶根据定义重新发出前一个报错err.
err是一个结构体,必须至少包含"message"
和"identifier"
field。err也可以包含字段"stack"
,用于提供在假定的报错位置的信息。一般而言,err从lasterror
返回.
err =
errno ()
¶err =
errno (val)
¶err =
errno (name)
¶查询或设置系统相关变量errno。
当在没有输入的情况下调用时,返回errno的当前值。
使用数字val调用时,将errno的当前值设置为指定值。errno的前一个值返回为err.
使用字符串name调用时,返回与指定的报错代码相对应的errno数值。如果name不是可识别的报错代码,则返回-1。
详见: errno_list.
S =
errno_list ()
¶返回一个包含系统相关errno值的结构体。
详见: errno.
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2