由于MATLAB中的try-catch块没有finally子句,我发现自己编写了大量代码,如下所示:
fid = fopen(filename);
if fid==-1
error('Couldn''t open file');
end
try
line = getl(fid);
catch ME
fclose(fid);
rethrow ME;
end
fclose(fid);
Run Code Online (Sandbox Code Playgroud)
我发现在两个地方都有fclose功能,很容易出错.
这样做有更好的方法吗?
我用这种方式使用Matlab并行计算工具箱:
matlabpool open
parfor …
matlabpool close
Run Code Online (Sandbox Code Playgroud)
如果发生错误parfor,则程序终止,并且matlabpool未关闭.当我修复错误并再次运行它时,matlabpool open失败,因为它已经打开.所以我需要手动关闭它,这是我永远忘记的.理想的方法是将其更改为(伪代码):
matlabpool open
try
parfor …
finally
matlabpool close
end
Run Code Online (Sandbox Code Playgroud)
这有什么最好的做法吗?
可能重复:
如何以异常安全的方式处理MATLAB中的资源?(比如"try ... finally")
如何关闭错误后保持打开的文件?
我通过fopen和创建一些文件和目录mkdir,并fclose在完成文件写入后用适当的命令关闭所有打开的流.然而,当我用Ctrl+ 中止计算时,C这些目录/文件以某种方式保留在内存中,我无法删除它们.即使后续close all调用也没有释放它们,我必须退出Matlab来释放这些文件.知道我怎么能反击这种行为(除了'停止使用中止')?
系统是:Win7 64bit,Matlab R2011b.