Matlab 脚本是否可以配置为";在未处理的异常情况下退出;?

Matlab 脚本是否可以配置为";在未处理的异常情况下退出;?,matlab,Matlab,是否有一种简单的方法来配置MATLAB脚本,使其在遇到未处理的异常时退出(而不是恢复到REPL) 原因是,在(无监督的)批处理模式下执行多次脚本运行时,任何失败的脚本都应立即退出,而不是在(无人参与的)交互提示下无限挂起 重要说明:此脚本将从Unix命令行执行,而不是从MATLAB交互式提示符执行。更具体地说,该脚本将使用 matlab -nodesktop -nosplash -nojvm -r myscript.m 脚本应该在执行完所有代码后终止MATLAB,并返回反映其成功(0)或失败(

是否有一种简单的方法来配置MATLAB脚本,使其在遇到未处理的异常时退出(而不是恢复到REPL)

原因是,在(无监督的)批处理模式下执行多次脚本运行时,任何失败的脚本都应立即退出,而不是在(无人参与的)交互提示下无限挂起

重要说明:此脚本将从Unix命令行执行,而不是从MATLAB交互式提示符执行。更具体地说,该脚本将使用

matlab -nodesktop -nosplash -nojvm -r myscript.m
脚本应该在执行完所有代码后终止MATLAB,并返回反映其成功(0)或失败(一些非零整数)的状态代码


我正在寻找一个全局设置(或命令行标志),它可以在不影响其余代码的情况下生效

注意,我正在寻找一些类似于某些Unix shell(例如bash、zsh)中可用的
-e
标志的东西,只要语句的返回状态为非零(意味着语句失败),它就会立即中止脚本


我知道我可以用
try catch
来包装脚本的整个主体,例如:


…但是,正如我上面所说的,我正在寻找一些简单的、对代码没有影响或影响最小的方法。

发生未处理异常时的默认行为是,有关错误的信息将打印到命令窗口,控件将返回到命令窗口。除非您使用
dbstop if error
显式启用了交互式提示,或者
catch
块中有
try
/
catch
命令,否则不应该从错误中获得交互式提示。要仅获取一个普通错误而不是交互式提示,您可以使用它来禁用此行为。我会检查你的启动文件,确保里面没有
dbstop if error


一个
try
/
catch
对实际上是唯一可以做到这一点的方法。您可以使用另一个文件包装对脚本的调用,并将对脚本的调用放入
try
/
catch
块中。这还有一个额外的好处,即您不必修改脚本本身,只需修改“运行者”

另外,您也不想使用
exit
,因为这会完全退出MATLAB

你的脚本.m

disp('Doing my thing')
error('Throwing an error!')
for k = 1:100
    try
        % Call your other script and hope for no errors!
        your_script
    catch ME
        % Print information about the error and continue
        fprintf(2, 'CAUGHT EXCEPTION:\n');
        fprintf(2, '%s(%d): %s\n', ME.stack.file, ME.stack.line, ME.message);
    end
end
调用脚本.m

disp('Doing my thing')
error('Throwing an error!')
for k = 1:100
    try
        % Call your other script and hope for no errors!
        your_script
    catch ME
        % Print information about the error and continue
        fprintf(2, 'CAUGHT EXCEPTION:\n');
        fprintf(2, '%s(%d): %s\n', ME.stack.file, ME.stack.line, ME.message);
    end
end
更新

根据您提供的希望从Unix命令行运行此命令的说明,您仍然希望使用类似的语句,将
try
/
catch
语句与
exit
结合使用。同样,您可以在外部文件中执行此操作,如上所示

调用脚本.m

code = 0;

try
    your_script
catch ME
    fprintf(2, 'CAUGHT EXCEPTION:\n');
    fprintf(2, '%s(%d): %s\n', ME.stack.file, ME.stack.line, ME.message);
    code = 1;
end

exit(code)

只有使用
try
/
catch
对才能做到这一点。请注意,
exit
完全退出MATLAB。您可以将脚本放在其他地方,并在有“脚本主体”的地方按名称调用它,而不是修改脚本本身。此外,除非启用了
dbstop if error
,否则您不应该收到错误的交互式提示。您可以使用
dbclear
禁用该功能,谢谢。读了你的答案后,我意识到我的问题需要包括一个重要的澄清;我刚刚加了它。简而言之:脚本总是要从Unix命令行调用,而不是从MATLAB的命令窗口调用。@kjo您仍然需要执行类似的操作。我已经在更新中显示了上述解决方案的替代方案。