12.1.2捕获错误

当发生错误时,可以使用尝试中所述的语句try语句。例如,以下代码统计在for

number_of_errors=0;对于n=1:100,请尝试。。。catch number_of_errors++;end_try_catchendfor

以上示例对所有错误一视同仁。然而,在许多情况下,有必要区分错误,并根据错误采取不同的行动。这个最后一个错误函数返回一个结构体,该结构体包含有关上次发生的错误的信息。例如,可以更改上面的代码以计算与“”相关的错误数*运算符

number_of_errors=0;对于n=1:100,请尝试。。。catch msg=lasterror.message;if(strfind(msg,“operator*”))number_of_errors++;endif end_try_catchendfor

或者,的输出最后一个错误函数可以在紧接在后面指示的变量中找到接住关键字,在下面的示例中显示如何将错误重定向为警告:

尝试捕获错误警告(err.identifier,err.message)。。。end_try_catch
 
: lasterr = lasterror ()
: lasterror (err)
: lasterror ("reset")

查询或设置最后一个错误消息结构体。

当在没有参数的情况下调用时,返回一个包含最后一条错误消息和与此错误相关的其他信息的结构体。该结构体的元素包括:

message

最后一条错误消息的文本

标识符

此错误消息的消息标识符

堆栈

一种结构体,包含有关消息发生位置的信息。如果无法获得信息,这可能是一个空结构体。结构体的字段为:

文件

发生错误的文件的名称

Name

发生错误的函数的名称

线

发生错误的行号

一个可选字段,其中包含发生错误的列号

最后的误差结构体可以通过传递标量结构体来设置,犯错误,作为输入。的任何字段犯错误将设置与上述字段匹配的字段,同时使用默认值初始化任何未指定的字段。

如果最后一个错误与参数一起调用重置,所有字段都设置为默认值。

详见: lasterr, 错误, 最后警告.

 
: [msg, msgid] = lasterr ()
: lasterr (msg)
: lasterr (msg, msgid)

查询或设置最后一条错误消息。

当在没有输入参数的情况下调用时,返回最后一条错误消息和消息标识符。

使用一个参数,将最后一条错误消息设置为消息.

使用两个参数,还可以设置最后一个消息标识符。

详见: 最后一个错误, 错误, 最后警告.

下一个示例统计索引错误。使用函数返回的结构体的字段标识符捕获错误最后一个错误.

number_of_errors=0;对于n=1:100,请尝试。。。catch id=lasterror.identifier;if(strcmp(id,“Octave:invalid indexing”))number_of_errors++;endif end_try_catchendfor

使用Octave分发的函数可能会发出以下错误之一。

 
Octave:赋值错误

表示无法赋值内存。

Octave:无效上下文

指示错误是从无法在调用它的作用域中执行的操作生成的。例如,函数打印使用()从Octave提示符调用时会引发此错误。

Octave:无效的趣味调用

表示函数的调用方式不正确,例如输入参数的数量错误。

Octave:无效索引

指示数据类型的索引不正确,例如数组的实值索引、结构体中不存在的字段。

Octave:无效的输入参数

指示使用无效的输入参数调用函数。

Octave:未定义的函数

指示对未定义的函数的调用。函数可能存在,但Octave无法在搜索路径中找到它。

处理完错误后,可以再次引发错误。当需要检测错误,但程序仍应中止时,这可能很有用。这可以使用重新思考作用现在可以更改前面的示例来计算与“”相关的错误数*运算符,但如果发生另一种错误,仍然会中止。

number_of_errors=0;对于n=1:100,请尝试。。。catch msg=lasterror.message;if(strfind(msg,“operator*”))number_of_errors++;else rethrow(lasterror);endif end_try_catchendfor
 
: rethrow (err)

根据定义重新发出前一个错误犯错误.

犯错误是一个结构体,必须至少包含message标识符field。犯错误也可以包含字段堆栈这提供了关于威瑟罗假定位置的信息。典型的犯错误从返回最后一个错误.

详见: 最后一个错误, lasterr, 错误.

 
: err = errno ()
: err = errno (val)
: err = errno (name)

查询或设置系统相关变量errno。

当在没有输入的情况下调用时,返回errno的当前值。

使用数字输入调用时val,将errnoto的当前值设置为指定值。errno的前一个值返回为犯错误.

使用字符串调用时name,返回与指定的错误代码相对应的ferrno数值。如果name不是可识别的错误代码,则返回-1。

详见: errno_list.

 
: S = errno_list ()

返回一个包含系统相关errno值的结构体。

详见: errno.


版权所有 © 2024 Octave中文网

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