我有一个Matlab(R2017b)脚本位于路径:
path1:C:\ ComputeCode \ Scr1.m
和脚本如:
path2:C:\ ComputeCode \ OtherFiles \ Scr2.m
Scr1.m有一个代码可以执行如下所示的操作:
%..... Scri.m.....%
..open files and do some processing...
cd(path2)
.. execute Scri2.m and do some processing ...
问题是如果Scr2.m中存在错误,则控件 不会回到path1,而是留在path2 如何在Scr1.m的开头添加一些代码,以便每当出现任何异常/错误时 在matlab中,它总是默认为path1来执行。
答案 0 :(得分:4)
实现这一目标的正确方法是利用绝对文件路径而不是相对文件路径,这样您就不必担心必须cd
进入目录才能获得正常功能。
其他方法包括:
onCleanup
,在销毁输出对象时执行代码。请注意,这需要您使Scr1
成为function才能以最少的额外工作量工作。
例如,我们有SOcode.m
:
function SOcode
home = pwd; % Store base directory
cleanupObj = onCleanup(@()cd(home));
cd(fullfile('./testfldr')) % Use fullfile for platform independence
asdf
end
和./asdf.m
,其中包含错误:
disp(a)
执行SOcode
后,您将收到错误消息:
>> SOcode
Undefined function or variable 'a'.
Error in asdf (line 1)
disp(a)
Error in SOcode (line 6)
asdf
但是要返回基本目录。
或者,您可以使用try/catch
来捕获异常并返回主目录,然后再重新抛出错误。这种方法不需要Scr1
作为函数。
例如,我们现在有SOcode.m
:
home = pwd;
cd(fullfile('./testfldr'))
try
asdf
catch e
cd(home)
rethrow(e)
end
使用相同的./asdf.m
,结果相同。
答案 1 :(得分:3)
%..... Scri.m.....% ..open files and do some processing...
try
cd(path2)
.. execute Scri2.m and do some processing ...
catch
cd(path1)
break
end
或类似的......