ruby異常處理

來源:互聯網
上載者:User

一、常見ruby異常資訊:

異常名

常見原因

怎樣拋出

RuntimeError

raise拋出的預設異常

raise

NoMethodError

對象找不到對應的方法

a=Oject.new
a.jackmethod

NameError

解譯器碰到一個不能解析為變數或方法名的標識符

a=jack

IOError

讀關閉的流,寫唯讀流,或類似的操作

STDIN.puts("不能寫入")

Errno::error

與檔案IO相關的一類錯誤

File.open(-10)

TypeError

方法接受到它不能處理的參數

a=3+"abc"

ArgumentError

傳遞參數的數目出錯

def o(x) end  o(1,2,3)

 

二、格式

參照java的異常處理。

try{  -------------- begin}catch(){  ---------rescue }finally{  ---------ensure}   ----------------end

可能會出現的異常資訊包含在begin、end之間。

指定異常跟在rescue之後,當然可以預設使用預設。rescue和else配對使用,else就是不是指定異常或者是沒有異常。

ensure等同於java中的finally,不多做解釋。

兩個重要變數:$!:異常的描述資訊、$@:異常出現的位置。

看個例子:

if __FILE__ == $0    a = 10  b = 20   c = 0 begin     ad=a/b  ac=a/c  rescue    puts "有異常  #{$!}, 位置:#{$@}"  else   puts "沒有異常"  ensure   puts "進入類finally區"  endend

執行結果:
有異常  divided by 0, 位置:exception.rb:15:in `/'exception.rb:15
進入類finally區

三、異常資訊儲存到變數

使用:rescue => e

列印:puts  e.to_s
借用上面的例子,rescue替換成如下:

  rescue => e   puts "有異常  #{$!}, 位置:#{$@}"   puts e.to_s+"....."

執行結果:

有異常  divided by 0, 位置:exception.rb:15:in `/'exception.rb:15
divided by 0.....
進入類finally區

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.