2015-02-05 42 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中定義的變量。