如何在用户输入错误时退出matlab m文件(而不是matlab本身)?

13
如何在用户输入错误时退出matlab m文件(而不是整个matlab)? 我知道如果m文件在运行时出错,我们可以按Ctrl-C停止它。但是我需要一个命令将其放入我的m文件中,以便在发生错误时执行此操作。
请不要建议使用“exit”或“quit”命令,因为它们会终止整个matlab,而我不想这样做。
3个回答

13
我不确定你是如何定义“退出”的, 但是error函数似乎是你需要的。
y = input('Please input a non-negative number: ');
if(y<0)
    error('input must be non-negative');
end

disp( sprintf('y=%f', y ) );

1
虽然有效且简单,但使用只有一个参数的 error 并不是最佳选择。它会阻止像 lasterror 这样的东西完全工作。此外,参数中的特殊字符,如 '\n',也不会被转换。 - horchler
1
我猜你建议使用MSGID参数,但我不确定如何实际提取它。我注意到即使在2017a中,它也需要这些参数是字符数组,而不是字符串...天啊,我讨厌Matlab。 - ensignr

7

嘿,我想你可以使用try-catch组合来处理一些意外错误并采取相应措施。

举个例子,

function [ output ] = test(input)

  Bmat = [ 1 1 1 ]   % Some matrix

  try
    input*B;
  catch ME
    disp(ME.message)
    return;          % This is the statement that exits your function
  end

end

如果您运行

>> test([1 1 1])

由于变量“input”和“B”的内部维度不匹配,所以它无法工作,但是“try”语句将抛出异常到“catch”,并从那里执行您想要的操作。在这种情况下,它将在命令行上显示错误消息并退出函数。
这里的变量“ME”只是MATLAB用于错误处理的对象,“ME.message”存储包含解释器捕获的错误类型的字符串。
我再次阅读了您的问题...我认为“return”命令可能是您真正需要的,您可以使用它退出任何逻辑或循环语句,以及函数。
您可以从MATLAB文档中了解有关“return”命令和错误处理的更多信息,http://www.mathworks.com/access/helpdesk/help/techdoc/ref/return.html

return 命令可以正常工作,但如果有多个输出,则会提示错误消息。我想这只是 Matlab 的设计不够好吧。 - Argyll

6

您可以像这样输入一个错误命令 error('bad user input'),它将停止脚本的运行。

编辑:或者,您可以重构代码,除非您将输入标志设置为 true,否则不会运行。例如:

inp = input('>', s)

if validateInput(inp)
    %do you stuff here or call your main function
else
    fprintf('Invalid input')
end

1
如果一个函数需要在多个地方退出,这种解决方案会导致一堆“运行或不运行”的if语句,非常不实用。 - Argyll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接