begin #開始
raise.. #拋出異常
rescue [ExceptionType = StandardException] #捕獲指定類型的異常 預設值是StandardException
$! #表示異常資訊
$@ #表示異常出現的代碼位置
else #其餘異常
..
ensure #不管有沒有異常,進入該代碼塊
end #結束
這是異常處理結構,可以結合$!錯誤原因,和$@錯誤位置做一個錯誤捕獲並提示的小程式了,比如
begin
puts
puts "file: #{name = ARGV.shift}"
file = open(name)
i = 0
file.read.each_line{|line| puts "#{i+=1}.#{line}" }
puts
rescue
puts "error:#{$!} at:#{$@}"
ensure
file.close
end
上面的小程式讀入一個指定的檔案並加入行號進行輸出,當產生錯誤時會輸出錯誤資訊以及提示,你可以故意輸入一個不存在的檔案名稱。
其實begin相當於c#的try
rescue相當於c#的catch
ensure相當於c#的finaly
raise相當於c#的throw
異常類的結構
異常類
Object
- Exception
- (Interrupt) (ruby 1.7 特性 version 1.6以前的位置)
- NoMemoryError
- ScriptError
- LoadError
- (NameError) (ruby 1.7 特性 version 1.6以前的位置)
- NotImplementedError
- SyntaxError
- SignalException
- StandardError
- ArgumentError
- IndexError
- IOError
- LocalJumpError
- NameError (ruby 1.7 特性)
- NoMethodError (ruby 1.7 特性)
- RangeError
- RegexpError
- RuntimeError
- SecurityError
- SystemCallError
- SystemStackError
- ThreadError
- TypeError
- ZeroDivisionError
- SystemExit
- fatal