如何在matlab中默认默认脚本的位置错误

时间:2018-03-08 20:53:35

标签: matlab

我有一个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来执行。

2 个答案:

答案 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)

Use try and catch

%..... Scri.m.....%  ..open files and do some processing...
try
   cd(path2)

.. execute Scri2.m and do some processing ...
catch
     cd(path1)
     break
end

或类似的......