snt*_*nth 29 file-io matlab exception-handling
由于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功能,很容易出错.
这样做有更好的方法吗?
gno*_*ice 36
我建议检查一下ONCLEANUP对象.它们允许您在退出函数时自动运行代码(更具体地说,从内存中清除ONCLEANUP对象时).洛伦来自MathWorks讨论这个在她的博客文章的一个位置.如果将上面的代码放在函数中,它可能看起来像这样:
function data = load_line(filename)
data = [];
fid = fopen(filename);
if fid == -1
error('Couldn''t open file');
end
c = onCleanup(@()fclose(fid));
data = getl(fid);
end
Run Code Online (Sandbox Code Playgroud)
即使对GETL的调用抛出异常,ONCLEANUP对象仍将从函数load_line返回时从内存中清除,从而确保文件被关闭.
| 归档时间: |
|
| 查看次数: |
3657 次 |
| 最近记录: |