Matlab中try, catch语句

目录

一.语法

二.说明

三.示例

1.补充错误消息

2.将错误重新打包为警告

3.处理不同类型的错误


        执行语句并捕获产生的错误。

一.语法

try
   statements
catch exception
   statements
end

提示

  • 不能在一个try块中使用多个catch块,但可以嵌套完整的try/catch块。

  • 与一些其他语言不同,MATLAB不允许在try/catch语句中使用finally块。

二.说明

try statements, catch statements end执行try块中的语句并在catch块中捕获产生的错误。此方法允许改写一组程序语句的默认错误行为。如果try块中的任何语句生成错误,程序控制将立即转至包含错误处理语句的catch块。

exception 是MException对象,可以用它来标识错误。catch块将当前异常对象分配给exception中的变量。

try和catch块都可包含嵌套的 try/catch 语句。

三.示例

1.补充错误消息

        创建两个无法垂直串联的矩阵。

A = rand(3);
B = ones(5);

C = [A; B];



Error using vertcat
Dimensions of matrices being concatenated are not consistent.

        使用 try/catch 显示有关维度的详细信息。

try
   C = [A; B];
catch ME
   if (strcmp(ME.identifier,'MATLAB:catenate:dimensionMismatch'))
      msg = ['Dimension mismatch occurred: First argument has ', ...
            num2str(size(A,2)),' columns while second has ', ...
            num2str(size(B,2)),' columns.'];
        causeException = MException('MATLAB:myCode:dimensions',msg);
        ME = addCause(ME,causeException);
   end
   rethrow(ME)
end 

Error using vertcat
Dimensions of matrices being concatenated are not consistent.

Caused by:
    Dimension mismatch occurred: First argument has 3 columns while second has 5 columns.

        如果矩阵维度不一致,则 MATLAB® 将显示有关不匹配的更多信息。而所有其他错误也都将正常显示。

2.将错误重新打包为警告

        捕获通过调用不存在的函数 notaFunction 而生成的任何异常。如果存在异常,则发出警告并为输出分配值 0。

try
    a = notaFunction(5,6);
catch
    warning('Problem using function.  Assigning a value of 0.');
    a = 0;
end


Warning: Problem using function.  Assigning a value of 0.

        对 notaFunction的调用本身会导致错误。如果使用try和catch,此代码将捕获任何异常并将其重新打包为警告,这样 MATLAB 就可以继续执行后续命令。

3.处理不同类型的错误

        使用 try/catch 以不同的方式处理不同类型的错误。

  • 如果未定义函数 notaFunction,将会发出警告而不是错误,并为输出赋值NaN

  • 如果 notaFunction.m 存在,但是为脚本而不是函数,将会发出警告而不是错误,运行该脚本,并为输出分配值0。

  • 如果 MATLAB 由于任何其他原因而引发错误,将重新引发该异常。

try
    a = notaFunction(5,6);
catch ME
    switch ME.identifier
        case 'MATLAB:UndefinedFunction'
            warning('Function is undefined.  Assigning a value of NaN.');
            a = NaN;
        case 'MATLAB:scriptNotAFunction'
            warning(['Attempting to execute script as function. '...
                'Running script and assigning output a value of 0.']);
            notaFunction;
            a = 0;
        otherwise
            rethrow(ME)
    end
end


Warning: Function is undefined.  Assigning a value of NaN. 

### 回答1: MATLAB try-catch 语句用于捕获并处理错误。try的代码会被执行,如果发生错误,则会跳到 catch执行相应的代码。语法格式如下: ``` try % Code to be executed catch ME % Code to handle the error end ``` ME 变量是一个 MException 对象,包含了错误的详细信息。可以通过调用 ME 的函数来获取错误的详细信息,如错误编号、错误消息等。 例如: ``` try a = 1/0; catch ME disp(ME.message); disp(ME.stack); end ``` 这样就可以在程序运行时避免停止并在出错时处理错误了。 ### 回答2: Matlabtry catch语句可以帮助开发人员处理程序的异常情况,提高程序的健壮性。try语句定义了一个需要保护的代码块,如果这个代码块出现异常,那么catch语句就会捕获这个异常并执行相应的操作。 try catch语句的基本语法如下: try % 执行需要保护的代码块 catch exception % 处理异常情况的代码 end 在try,我们可以放置可能导致程序异常的代码。当遇到异常时,程序会跳转到catch语句所在的位置。catch语句会捕获异常,并提供一个异常对象,我们可以通过这个对象获取异常的相关信息,如异常的类型、消息、堆栈等。在catch,我们可以根据异常对象执行相应的操作,如记录日志、输出异常信息等。 try catch语句还可以嵌套使用,用来处理不同的异常类型。我们可以在catch语句使用if或switch语句判断异常类型,并执行相应的操作。此外,我们还可以在catch语句重新抛出异常,让更高级别的代码段处理这个异常。 使用try catch语句可以有效的提高程序的健壮性和可靠性。但是,有时候过度的使用try catch语句也会影响程序的性能和代码的可读性。因此,在使用try catch语句时,应该根据具体情况选择合适的方案,提高代码的质量和效率。 ### 回答3: MATLABtry-catch语句是一种异常处理机制。当程序执行过程发生异常时,try-catch语句能够捕获异常并给出相应的处理方法。这样,即使程序出错,也能够继续执行下去,而不是直接停止运行。 try-catch语句的基本格式如下: ``` try % 可能会产生异常的代码 catch exception % 异常处理代码 end ``` try包含可能会产生异常的代码,catch包含异常处理代码。catch的exception是一个结构体,包含了异常的相关信息,如异常类型、异常信息等。catch的代码根据具体情况进行处理,可以将异常信息输出到命令行窗口,也可以将异常信息写入日志文件,或者进行其他操作。 除了基本格式之外,try-catch语句还可以包含多个catch块,用于处理不同类型的异常。例如: ``` try % 可能会产生异常的代码 catch exception1 % 处理类型为exception1的异常 catch exception2 % 处理类型为exception2的异常 catch % 处理其他类型的异常 end ``` try-catch语句还可以嵌套使用,即在trycatch再包含一个try-catch语句。这样可以进一步提高程序的健壮性和可靠性。 总之,MATLABtry-catch语句是一种非常有用的异常处理机制,能够提高程序的稳定性和可靠性。在编写程序时,我们应该适当使用try-catch语句,合理处理程序可能出现的异常情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值