異常處理: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