【发布时间】:2015-03-06 14:54:43
【问题描述】:
我在 Matlab 中有一种奇怪的错误。
metr = cell(1,length(paths));
parfor i = 1:length(paths)
try
a = read(path{i});
catch err
continue;
end
metr{i} = dosomething(a);
end
上面的代码可以作为一个正常的循环正常工作,并捕获两个错误并继续。如果我将其设为parfor 循环,则在它捕获错误的那一刻,它会完全疯狂地从头开始再次运行 for 循环,最后因找不到变量 metr 的错误而崩溃。
但是,如果我将其重写如下,我不会收到任何错误并且parfor 循环有效,无论我是否离开continue 语句:
metr = cell(1,length(paths));
parfor i = 1:length(paths)
try
a = read(path{i});
errB = 0;
catch err
errB = 1;
continue;
end
if ~errB
metr{i} = dosomething(a);
end
end
有人知道发生了什么吗?它似乎在continue 语句之后继续执行。我认为只有 break; 在 parfor 循环中不受支持,而 continue 有效。
我很困惑……
附言错误:
'metr' 的工作人员引发了 UndefinedFunction 错误。
这可能是因为文件包含 'metr' 工人无法访问。
编辑:好的,我找到了谁的错。似乎如果我从catch err 行中删除err 变量,它会突然正常工作!我仍然不知道为什么将错误分配给变量会使循环变得疯狂。
【问题讨论】:
-
你确认结果是一样的吗?
-
是的,我查过了,他们是