Ruby面試精選30題 - Day26 Ruby的錯誤處理機制 Rescue
有一句話說得好,「不怕一萬,只怕萬一」,如何檢查程式上的錯誤是一件重要的議題。好的工程師會懂得防範於未來。現在我們就來用Ruby練習一下錯誤與例外處理吧!
重點摘要:
Ruby經典面試題目 #26
- Ruby的錯誤處理機制 Rescue.
Explain Error Handling in Ruby.`
Ruby能以區隔的 (compartmentalized) 方式處理錯誤及例外的程式碼區塊,基本架構:
-
begin
到rescue
這段區間是程式可能會出錯的地方。 -
rescue
到end
是我們對於錯誤真正發生時的反應措施。
begin
error #something happens!
rescue
puts 'ERROR! Rescue me!' #=> ERROR! Rescue me!
end
舉例
我們從小學的時候就學過,0不能當分母(denominator)。身為工程師,我們預期會有User不小心(或是故意)輸入了0在分母,因此在rescue
段落,將0用全域變數$!
把最新的錯誤訊息傳進來,並提醒使用者再輸入一次分母:
begin
print "Enter numerator: "
num = Integer(gets)
print "Enter denominator: "
den = Integer(gets)
rate = num / den
puts rate
rescue
print $!
puts
print "Enter denominator other than 0:"
den = Integer(gets)
rate = num / den
puts rate
end
程式運行過程如下:
Enter numerator: 5
Enter denominator: 0
divided by 0
Enter denominator other than 0: 1
5
[第25天]在看rails文件的.exists
方法是怎麼被刻出來的時候,發現了rescue...end
:
# File activeresource/lib/active_resource/base.rb, line 869
def exists?(id, options = {})
if id
prefix_options, query_options = split_options(options[:params])
path = element_path(id, prefix_options, query_options)
response = connection.head(path, headers)
response.code.to_i == 200
end
# id && !find_single(id, options).nil? id存在且不為空
rescue ActiveResource::ResourceNotFound, ActiveResource::ResourceGone
false
end
現在總算看得懂了!
Ref: