2015-02-05 43 views
2

MatLab中是否有可能在嵌套函数中引发异常,并让它被更高级的函数(如C++或Visual Basic)“捕获”?MatLab'catch'比'try'更高吗?

+2

你的意思是['rethrow'](http://es.mathworks.com/help/matlab/ref/rethrow.html)? – 2015-02-05 21:43:29

+0

@LuisMendo在这里不会'抛出'更好吗? OP在捕捉它之后不会再写入任何有关抛出异常的内容。我认为他想要的是“抛出”一个异常,并将它抓得更高。如果异常没有被明确抛出,对于所有的异常也是自动的,这也是matlab异常(例如索引超出范围等等)。 – patrik 2015-02-06 09:39:13

+0

如果你可以扔掉它,直到更高的级别,它是没有被捕获的(我真的不知道它是如何工作的)。 – 2015-02-06 09:53:09

回答

1

很有可能在更高层次上发现异常。我认为不可行的是在另一个层面上捕捉异常,而不是在尝试的地方。但我不确定。 try catch在matlab中实现相当简单。它真的以自动魔法的方式解决了自己。在try块内部抛出异常是可能的,然后它会被捕获。也可以围绕可能在try块内出错的代码,然后捕获异常。

使用抛出:

function mymain() 
    x=[1,2]; 
    try 
     myfun(x); 
    catch me 
     disp(me); 
     error(me.message); 
    end 
end 

function myfun(x) 
    if (length(x)>1) 
     throw(MException('MATLAB:badsubscript','x must be scalar!')); 
    end 
end 

使用什么:

function mymain2() 
    x=[1,2]; 
    try 
     myfun2(x); 
    catch me 
     disp(me); 
     error(me.message); 
    end 
end 

function myfun2(x) 
    x(7); 
end 

变量me没有在你自己实际上定义一个变量me感定义。这是相当matlab创建一个异常,然后异常存储在catch中定义的变量。