今天小編給大家分享一篇ruby.html" target="_blank">Ruby異常處理的詳細(xì)解析,感興趣的朋友跟小編一起來了解一下吧!
異常和執(zhí)行總是被聯(lián)系在一起。如果您打開一個不存在的文件,且沒有恰當(dāng)?shù)靥幚磉@種情況,那么您的程序則被認(rèn)為是低質(zhì)量的。
如果異常發(fā)生,則程序停止。異常用于處理各種類型的錯誤,這些錯誤可能在程序執(zhí)行期間發(fā)生,所以要采取適當(dāng)?shù)男袆樱恢劣谧尦绦蛲耆V埂?/p>
Ruby 提供了一個完美的處理異常的機(jī)制。我們可以在 begin/end 塊中附上可能拋出異常的代碼,并使用 rescue 子句告訴 Ruby 完美要處理的異常類型。
語法
begin
# -
rescue OneTypeOfException
# -
rescue AnotherTypeOfException
# -
else
# 其他異常
ensure
# 總是被執(zhí)行
end
從 begin 到 rescue 中的一切是受保護(hù)的。如果代碼塊執(zhí)行期間發(fā)生了異常,控制會傳到 rescue 和 end 之間的塊。
對于 begin 塊中的每個 rescue 子句,Ruby 把拋出的異常與每個參數(shù)進(jìn)行輪流比較。如果 rescue 子句中命名的異常與當(dāng)前拋出的異常類型相同,或者是該異常的父類,則匹配成功。
如果異常不匹配所有指定的錯誤類型,我們可以在所有的 rescue 子句后使用一個 else 子句。
實例
#!/usr/bin/ruby
begin
file = open("/unexistant_file")
if file
puts "File opened successfully"
end
rescue
file = STDIN
end
print file, "==", STDIN, "/n"
這將產(chǎn)生以下結(jié)果。您可以看到,STDIN 取代了 file ,因為打開失敗。
#0xb7d16f84>0xb7d16f84>
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
新聞熱點
疑難解答
圖片精選