Matlab探寻(四):捕获异常(catch MException)

2024-06-06 21:38

本文主要是介绍Matlab探寻(四):捕获异常(catch MException),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     全文转载自bible_reader博客 【Matlab捕获异常】

  在写Matlab小程序的时候,经常会遇到一些细小的错误或异常。在运行程序时,希望能够捕获这些错误并将其错误信息输出,然后再写发生错误时对应的处理程序。在此总结一下Matlab的错误捕捉并选择性地输出错误信息。

1、MException 捕获异常信息类

Matlab提供了一个MException类来保存执行代码时捕获到的错误信息。当发现错误时,Matlab即生成一个MException类对象,该对象具有以下属性和函数。

属性:

    identifier:为一个字符串,每一个错误对应一个identifier,其至少包含两个用分号“:”隔开的子串,主要形式为COMPONENT:MNEMONIC。

    message:为一个字符串,主要用于向用户反馈错误信息。

    stack:用于保存各个m文件之间调用的栈关系

    cause:造成错误的MExceptions所组成的元包阵列Cell Array。

函数:

    throw():将错误信息在命令窗口command window上输出,并终止程序的执行。

    rethrow():将已经捕获的错误重新在命令窗口command window上输出,并终止程序的执行。

    throwAsCaller():用调用函数的方式将错误信息在命令窗口command window上输出。

    addCause():将两个MException错误信息进行叠加,并返回一个新的MException对象,该对象包含了被叠加的两个MException对象的错误信息。

    getReport():获取错误信息的message属性并返回。

    last():返回最新的一个未被捕获的错误信息。

2、捕获异常的基本形式

形式1

将捕获的错误直接传递到一个MException对象ErrorInfo,让Matlab对ErrorInfo对象的属性(identifier、message等属性)进行赋值。

[plain] view plain copy
print ?
  1. a = [1,2,3];  
  2. b = [2,3];  
  3. try   
  4.     c = [a; b]; %有错误(列的维度不一致),跳转到catch语句行并执行  
  5.     disp(c);    %发现错误后,该行代码不执行  
  6. catch ErrorInfo %捕获到的错误是一个MException对象  
  7.     disp(ErrorInfo);  
  8.     disp(ErrorInfo.identifier);  
  9.     disp(ErrorInfo.message);  
  10.     disp(ErrorInfo.stack);  
  11.     disp(ErrorInfo.cause);  
  12.       
  13.     %发生错误时的其他动作  
  14.   
  15. end  

形式2

直接生成一个MException对象ME,并手动对ME对象中的属性进行初始化赋值。

MException类对象的初始化格式为:

MException(MSGID, ERRMSG, V1, V2, …, VN),其中MSGID为identifier,ERRMSG为message,其中ERRMSG可以为包含%s、%d等格式控制字符串,而V1、V2…VN则为格式控制串对应的值。

[plain] view plain copy
print ?
  1. inputstr = input(‘Type a variable name:’, ‘s’);  
  2. if ~exist(inputstr, ‘var’)  
  3.    ME = MException(‘MyComponent:noSuchVariable’, ‘Variable %s not found’, inputstr);%直接生成一个MException对象,并初始化  
  4.    throw(ME);  
  5. end  

3、函数介绍

3.1 throw()

将错误信息在命令窗口command window上输出,并终止程序的执行。其在命令窗口输出的是错误对象的message属性。


3.2 rethrow()

将已经捕获的错误重新在命令窗口command window上输出,并终止程序的执行。利用该函数可以将上面的ErrorInfo重新抛出一次。注意两者的细微区别。


3.3 throwAsCaller()

用调用函数的方式将错误信息在命令窗口command window上输出。利用该函数采用调用函数的形式将错误信息在命令窗口command window上输出。


3.4 addCause()

将两个MException错误信息进行叠加,并返回一个新的MException对象,该对象包含了被叠加的两个MException对象的错误信息。

如下所示,cause1_ME表示矩阵越界访问错误,cause2_ME表示不存在这样的文件时仍然load的错误。然后通过将这两种错误信息进行叠加,具体效果如下图所示。



3.5 getReport()

获取错误信息的message属性并返回。


3.6 last()

返回最新的一个未被捕获的错误信息。如下所示,ErrorInfo是之前捕获的错误信息,然后重新制造一个matlab错误(越界访问矩阵),并且该错误并没有被matlab捕获到一个MException对象中,因此可以用该函数返回最新的一个未被捕获的错误信息。


这篇关于Matlab探寻(四):捕获异常(catch MException)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037306

相关文章

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

redis在spring boot中异常退出的问题解决方案

《redis在springboot中异常退出的问题解决方案》:本文主要介绍redis在springboot中异常退出的问题解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴... 目录问题:解决 问题根源️ 解决方案1. 异步处理 + 提前ACK(关键步骤)2. 调整Redis消费者组

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决

python利用backoff实现异常自动重试详解

《python利用backoff实现异常自动重试详解》backoff是一个用于实现重试机制的Python库,通过指数退避或其他策略自动重试失败的操作,下面小编就来和大家详细讲讲如何利用backoff实... 目录1. backoff 库简介2. on_exception 装饰器的原理2.1 核心逻辑2.2

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows