MATLAB - 错误处理



错误处理是一种允许您管理和响应在 MATLAB 程序运行期间可能发生的错误或意外情况的方法。与其让程序崩溃并给出不必要的结 果,不如优雅地处理错误,向用户提供反馈,甚至尝试从问题中恢复。

执行代码时可能发生的常见错误类型包括语法错误、运行时错误或逻辑错误。

语法错误

MATLAB 中的语法错误发生在代码的结构或语法存在错误时。

示例

% Syntax Error Example
c = a + b;

在此代码中,存在语法错误,因为在计算中使用 a 和 b 之前,它们未定义或未赋值。MATLAB 期望在表达式中使用这些变量之前定义或分配它们的值。要更正此语法错误,应在使用 a 和 b 之前定义或分配它们的值。

运行时错误

MATLAB 中的运行时错误发生在代码正在运行但执行过程中遇到阻止其成功完成的问题时。

result = 10 / 0; % Division by zero

尝试将数字除以零会导致运行时错误。

逻辑错误

% Logical Error Example
n = 5;
sum = 0;
for i = 1:n
   sum = sum + i;
end

在此代码中,循环从 1 运行到 n,将 1 到 n 的值添加到 sum 中。但是,如果我们想要计算 1 到 n 的数字之和,则代码不正确,因为它会将 n 包括在 sum 中。循环应该从 1 运行到 n-1。

matlab 中的错误处理有助于我们在执行代码时处理任何语法、运行时和逻辑问题。错误处理会将任何代码执行失败的正确原因告知用户。

在 Matlab 中向用户显示错误消息

以下是如何在 matlab 中使用显示错误消息向用户显示错误消息的简单示例:

语法

error(msg) : helps to generate a simple error message with a custom explanation
error(msg,A) : helps to create an error message with placeholders (e.g., %s, %d) that can be replaced with actual values from variables.

示例 1:使用 error(msg)

value = 120;
if value > 100
   error('Value entered is greater than expected. Please use a smaller value.');
end

在此示例中,如果值为大于 100,它将触发带有自定义消息“输入的值大于预期。请使用较小的值。”的错误。

在 matlab 命令窗口中执行时,输出为:

>> value = 120;
if value > 100
   error('Value entered is greater than expected. Please use a smaller value.');
end

error: Value entered is greater than expected. Please use a smaller value.

示例 2:使用 error(msg, A)

age = 150;
if age > 100
   error('Error: Age value is too high. It should be below %d.', 100);
end

在此示例中,如果年龄大于 100,则错误消息将包括值 100 以代替 %d 占位符,从而导致消息:“错误:年龄值过高。它应该低于 100。”

在 matlab 命令窗口中执行时,输出为:

>> age = 150;
if age > 100
    error('Error: Age value is too high. It should be below %d.', 100);
end

error: Age value is too high. It should be below 100.

在 Matlab 中向用户显示警告消息

对于警告消息,我们可以使用 matlab 中提供的内置函数 warning()。

warning(msg) : used to issue a warning with a custom message msg.
warning(msg,A) : displays message containing format conversion characters, similar to the ones used in MATLAB sprintf() function.Every placeholder character within the 'msg' is substituted with one of the corresponding values from 'A'.
warning(state): enables, disables, or displays the status of all warnings.

示例 1

在下面的示例中,将显示一条警告消息,内容为:“x 的值 (10) 大于 5。”。%d 是一个格式化字符,x 的值将插入到该位置的警告消息中。

x = 10;
if x > 5
   warning('The value of x (%d) is larger than 5.', x);
end

在 matlab 命令窗口中执行时,输出为:

>> x = 10;
if x > 5
   warning('The value of x (%d) is larger than 5.', x);
end

Warning: The value of x (10) is larger than 5.

示例 2

让我们使用 warning() 方法仅显示警告消息,如下例所示:

warning('Testing warning!')

在 matlab 命令窗口中执行时,输出为:

>> warning('Testing warning!')

Warning: Testing warning! 

示例 3

要了解警告的状态,您只需在 matlab 命令窗口中键入 warning 并回车即可。

warning

在 matlab 命令窗口中执行时,输出为:

>> warning
All warnings have the state 'on'.

示例 4

warning('off')

执行上述代码并键入 warning 后,您应该会看到消息“所有警告的状态均为 'off'。”。

>> warning('off')
>> warning
All warnings have the state 'off'.

示例 5

warning('on')

执行上述代码并键入 warning 后,您应该会看到消息“所有警告的状态均为 'on'。”。

>> warning('on')
>> warning
All warnings have the state 'on'.

使用 try/catch 语句进行错误处理

MATLAB 中的 try 和 catch 块有助于管理代码执行期间可能发生的潜在错误。

try/catch 示例

该示例显示了尝试在 try 块内执行 test() 函数的代码。如果在执行 test() 期间发生错误,MATLAB 将捕获错误并跳转到 catch 块,在该块中,它将显示一条错误消息,其中包含有关错误的详细信息,使用 disp(['Error occurred: ' exception.message]);

try
   a = test()
catch exception
   % Handle the error here
   disp(['Error occurred: ' exception.message]);
end

在 matlab 命令窗口中执行相同的操作时,输出为:

>> try
   a = test()
catch exception
   % Handle the error here
   disp(['Error occurred: ' exception.message]);
end
Error occurred: Execution of script test as a function is not supported:
/MATLAB Drive/test.m

如果您查看执行情况,则函数 test 不存在,因此捕获错误并显示详细的错误消息。

广告