MATLAB - try...catch 语句



MATLAB 中的 try...catch 语句用于处理代码执行期间可能发生的错误和异常。它允许你优雅地处理错误,防止程序崩溃,并向用户提供详细的反馈。

让我们检查一下 try..catch 语句的语法。

语法

try
   statements
catch exception
   statements
end

语法的详细解释如下:

try

try 块包含你认为可能产生错误的代码。这是你要监控错误异常的代码部分。当 MATLAB 在 try 块中遇到错误时,它会立即跳转到相应的 catch 块。

catch 异常

catch 块用于处理在 try 块中捕获的错误。它以关键字 catch 开头,后跟变量 exception,它可以是你选择的任何有效的变量名。此变量会自动填充发生错误的信息。你可以使用 exception 来访问与错误相关的信息,例如错误消息、标识符等等。

exception 变量是可选的;如果你不需要访问有关错误的信息,可以选择省略它。但是,它通常用于分析或记录错误详细信息。

try 和 catch 块中的语句

在 try 和 catch 块中,你可以包含一个或多个 MATLAB 语句。在 try 块中,这些是可能发生错误的语句。在 catch 块中,这些是你希望在捕获错误时执行的语句。

MATLAB 中 try...catch 语句的示例

让我们看几个示例,这些示例展示了 try..catch 在 matlab 中的工作方式。

示例 1:处理特定错误

让我们在 try...catch 块中执行以下代码,该代码故意尝试访问未定义的变量:

try
   result = undefined_variable
   fprintf('The result is: %f\n')
catch exception
   fprintf('An error occurred: %s\n', exception.message)
end

当你在 matlab 中执行以上代码时,输出为:

>> try
   result = undefined_variable
   fprintf('The result is: %f\n')
catch exception
   fprintf('An error occurred: %s\n', exception.message)
end

An error occurred: Unrecognized function or variable 'undefined_variable'.

在上面的代码中,不允许访问 undefined_variable,这将生成一个异常,导致 catch 块执行并显示一条错误消息,指示该变量未定义。

示例 2:使用 try-catch 块处理多个错误

在此示例中,代码尝试访问数组索引超出范围的索引。catch 块处理此特定错误,对于其他意外错误,将显示不同的消息。

try
   y = [1, 2, 3];
   z = y(4) % Accessing an out-of-bounds index will generate an error
catch exception
   if strcmp(exception.identifier, 'MATLAB:badsubscript')
      fprintf('Index out of bounds error: %s\n', exception.message);
   else
      fprintf('An unexpected error occurred: %s\n', exception.message);
   end
end

当你在 Matlab 命令窗口中执行时,输出为:

>> try
   y = [1, 2, 3];
   z = y(4) % Accessing an out-of-bounds index will generate an error
catch exception
   if strcmp(exception.identifier, 'MATLAB:badsubscript')
      fprintf('Index out of bounds error: %s\n', exception.message);
   else
      fprintf('An unexpected error occurred: %s\n', exception.message);
   end
end

Index out of bounds error: Index exceeds the number of array elements. Index must not exceed 3.

示例 3:另一个显示不同类型错误的示例

此示例显示如何使用 try...catch 结构处理不同类型的异常,其中检查每种异常类型,并根据特定异常类型提供自定义警告消息和操作,确保你的代码对错误做出优雅的响应。

try
   result = customFunction(5, 6);
catch exception
   switch exception.identifier
      case 'MATLAB:UndefinedFunction'
         warning('The custom function is not defined. Assigning a value of -1.');
         result = -1;
      case 'MATLAB:scriptNotAFunction'
         warning(['Attempting to execute a script as a function. '...
               'Running the script and assigning the output a value of 0.']);
         customFunctionScript;
         result = 0;
      otherwise
         rethrow(exception)
   end
end

让我们在 matlab 命令窗口中测试如下所示:

>> try
   result = customFunction(5, 6);
catch exception
   switch exception.identifier
      case 'MATLAB:UndefinedFunction'
         warning('The custom function is not defined. Assigning a value of -1.');
         result = -1;
      case 'MATLAB:scriptNotAFunction'
         warning(['Attempting to execute a script as a function. '...
               'Running the script and assigning the output a value of 0.']);
         customFunctionScript;
         result = 0;
      otherwise
         rethrow(exception)
   end
end

Warning: The custom function is not defined. Assigning a value of -1. 
>> 

关于 MATLAB 中 try-catch 块的关键点

关于 MATLAB 中 try-catch 块的关键点的详细解释如下:

单个 try 块中的多个 catch 块

与 Java 等编程语言不同,MATLAB 不允许在单个 try 块中包含多个 catch 块。换句话说,你不能直接在 try 块中为处理各种类型的异常设置不同的 catch 部分。相反,你通常使用单个 catch 块来捕获和处理异常,然后你可以在该 catch 块中使用条件语句或其他逻辑来处理不同类型的异常。

嵌套 try/catch 块

为了处理异常或管理不同的错误处理方法,你可以嵌套完整的 try/catch 块。这意味着你可以在另一个 try/catch 块中包含一个 try/catch 块,形成一个分层错误处理机制。这允许你在代码的不同级别捕获和处理错误,从而在错误管理方面提供灵活性。

缺少 finally 块

与其他编程语言(例如 Java)一样,MATLAB 不支持在 try/catch 语句中使用 finally 块。finally 块通常用于需要运行的代码,无论是否发生异常。在 MATLAB 中,你需要将此类代码放在 try/catch 块之外,以确保它始终执行,无论是否抛出异常。

广告