ruby全部異常

在此輸入圖片描述

異常處理:begin .. rescue .. else .. ensure .. end ,能夠使用$!去格式化錯誤信息,else會出如今rescue子句和任何一個ensure子句以前,else中的程序只有在block中沒有出現任何異常是纔會執行,如:java

<!-- lang: ruby -->
begin
    ...
rescue SystemCallError
    print "IO failed: " + $!
    ...
else
    ... #begin else之間的代碼沒有出現任何異常才執行
ensure #相似與java中的finally
    
end

有多個rescue子句,rescue的結束處能夠提供一個局部變量來接受匹配的異常。如:ruby

<!-- lang: ruby -->
begin
    ...
rescue SyntaxError, NameError => e
    print e
end

系統錯誤均是SystemCallError的子類,見上圖,定義在Errno模塊中,每一個Errno對象都有一個Errno類常量,要比較SystemCallError的兩個子類,是比較他們的錯誤碼Errno::EAGAIN::Errno,若兩個子類的錯誤碼相同,則這兩個異常在rescue中被同等對待,rescue其中一個,另外一個也會被rescuecode


引起異常對象

<!-- lang: ruby -->
#引起當前異常($!),若是當前沒異常的話,引起RuntimeError
raise
#建立新的RuntimeError異常,把它的消息設置爲指定的字符串
raise "bad mp3 encoding"
#建立異常 相關聯的消息設置 棧信息(能夠是任何對象,一般使用Kernel.caller方法產生棧信息)
raise InterfaceException, "KeyBoard failure", caller
相關文章
相關標籤/搜索