matlab - 在数组中找到错误值的索引并显示错误

标签 matlab error-handling

我有很多逻辑条件要检查。对于每个不满足的条件,我需要一条错误消息。这是我的代码,可以更好地理解:

v1 = isequal(c{1, 1}, 'some string');
v2 = isequal(c{1, 2}, 0);
v3 = isequal(c{2, 1}, 'some string');
v4 = isequal(c{2, 2}, 0);
v5 = isequal(c{3, 1}, 'some string');
v6 = isequal(c{3, 2}, 0);

v = [v1, v2, v3, v4, v5, v6];

在上面的代码中,一些测试返回false,因此在v中它们为零(false)。

现在,我要获取哪些为零并在错误中对其进行标记。例如,如果v3为false,则需要显示error('Check the v3 for solving')的输出。

如果条件超过一次,我将无法使用,我还需要从v获取值。

最佳答案

您不必自己进行所有这些比较,可以使用cellfun

c = {'test',        0 
     'some string', 1 
     'some string', 0};

V = cellfun(@isequal, c, {'some string', 0; 'some string', 0; 'some string', 0})

>> V = 3x2 logical
   [0 1 
    1 0
    1 1]

要获取v,您可以将其转换为 vector
v = V(:); % v = [0 1 1 1 0 1].';

然后,您可以创建错误消息。
error(['Check: ' sprintf('v%d, ', find(~v)) 'did not match criteria'])

% Output in red (and stops function) as it is an error
>> Check: v1, v5, did not match criteria

当然,您可以像以前一样继续创建v,或者跳过声明v = V(:)并直接在错误的V(:)语句中使用v代替find

无论哪种方式,这基本上都是使用sprintf创建所需错误的一种方法。

如果您的两个检查确实始终是两个相同的值(例如'some string'0),则不必每次都将它们写出来
V = cellfun(@isequal, c, repmat({'some string', 0}, size(c,1), 1))

您可能要在启动错误之前检查是否至少有一个false值,请使用any ...
if any(~v); error(['Check: ' sprintf('v%d, ', find(~v)) 'did not match criteria']); end;

关于matlab - 在数组中找到错误值的索引并显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45982665/

相关文章:

java - 如何使用 ScheduledExecutorService 处理重复任务中的错误?

macos - 在 Mac OS X 10.11.1 (El Capitan) 上为 Matlab R2015a 安装 IPOPT

matlab - 使用MATLAB Engine时如何获取matlab的PID?

php - 如何获取错误代码的文本?

python - 在点距条件下选择行

android - 移动应用程序崩溃时如何捕获错误消息/将错误消息发送到电子邮件?

android - Android Firebase在ListView中检索数据错误

r - 优化(最小化)文件 : an optimization problem in line with permutations and agenda scheduling 中的行数

软件;带有 2+/拆分图例的饼图 R2017b

performance - 为什么在 MATLAB 中缓存答案需要更长的时间?