【问题标题】:Matlab: How can i stop a the whole function in matlab?Matlab:如何在 matlab 中停止整个函数?
【发布时间】:2016-01-05 23:52:10
【问题描述】:

我在 matlab 中有一个函数来计算一些东西。在该函数中,我打开另一个函数来为它计算一些东西。 现在在第二个函数中,我有一些情况,如果某些特定条件为真,我只想停止一切(所以我想结束这两个函数)

我不想要错误信息或任何东西;有这个命令吗?

如果我只输入error,我会收到一些红色通知,其中包含如下消息:

error: Invalid call to error.  Correct usage is:

 -- Built-in Function: error (TEMPLATE, ...)
 -- Built-in Function: error (ID, TEMPLATE, ...)

error: called from:
error:   /usr/share/octave/3.8.1/m/help/print_usage.m at line 89, column 5
>>>error:   /home/john/wpq.m at line 75, column 4
error:   /home/john/test.m at line 23, column 21

如果我写 error('blabla') 我仍然得到:

>>>error: blabla
error: called from:
error:   /home/john/wpq.m at line 75, column 4
error:   /home/john/test.m at line 23, column 21

我不想得到任何输出,因为我可以在上面写一行 disp('the test on this number failed')

【问题讨论】:

  • 您可以使用return 语句,将嵌套函数中的值返回给主函数。然后处理返回值以停止主函数。
  • 感谢您的想法.. :) 我想它也可以工作,但是如果我在主函数中并且我发现返回值表示该函数已停止 - 我该如何停止main 函数然后没有错误信息?
  • 但它只会停止一个循环.. :(

标签: matlab


【解决方案1】:

您可以尝试在主函数中放置一个 try/catch 块,以预期您希望代码执行停止的条件。 我不相信有任何一个命令可以让代码停止从函数中的函数执行。

【讨论】:

  • 谢谢...我不熟悉try/catch,所以我会阅读它的手册...谢谢! :)
  • 一个问题:如果我不想出现错误信息,我应该在catch块中写什么?
  • @J.Doe 这篇文章解释了 try/catch 在 Matlab 中的工作原理:au.mathworks.com/help/matlab/ref/try.html 希望对您有所帮助!
  • 是的,我已经读过了-谢谢...但是我仍然不知道在catch块中写什么来终止而没有错误消息:(
  • 一旦你在catch块中发现了错误,你可以在catch块中写任何你想要的,然后从函数中返回。例如。您可以将disp('the test on this number failed') 放在 catch 块中。除非您告诉它,否则它不会打印错误。
【解决方案2】:

有很多方法可以做你想做的事。通常错误仅用于实际上是错误的事情。例如,如果您尝试访问数组外的元素,则会收到“索引超出范围”错误。如果发生的事情是错误,您应该发送错误消息以通知用户发生的事情并突出显示这是一个错误。但是,如果您只想结束这个特定的计算而不是程序,我会推荐try-catch 并在catch 中打印错误消息。

如果这是正常终止(或者如果只有特定函数异常终止并且这是某些输入所期望的),您可以使用终止条件 (function [out,success] = myFun(in)) 或 try-catch。两者都被接受,尽管我过去更喜欢正常终止的终止条件方法和非正常终止(函数)的 try-catch。例如,非正常终止可以是在计算所有输出变量之前必须终止函数。我以前更喜欢抛出异常而不是返回无效值的函数(但 c 程序员可能会争论不同)。

作为记录,Matlab 中有一个return-statement 终止特定函数。

在不了解您所处的情况的情况下很难推荐一种特定的方法,但本文将为您提供一些不同的选项供您选择。要知道错误处理很少有可以说是“正确”的标准方法。通常由程序员决定什么是合适的,这通常是设计的一部分。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多