當乙個方法結束工作時我們也許需要進行清理工作.也許乙個開啟的檔案需要關閉,緩衝區的資料應清空等等.如果對於每乙個方法這裡永遠只有乙個退出點,我們可以心安理得地將我們的清理程式碼放在乙個地方並知道它會被執行;但乙個方法可能從多個地方返回,或者因為異常我們的清理程式碼被意外跳過.
begin
file = open("/tmp/some_file", "w")
# ... write to the file ...
file.close
end
上面,如果在我們寫檔案的時候發生異常,檔案會保留開啟.我們也不希望這樣的冗餘出現:
begin
file = open("/tmp/some_file", "w")
# ... write to the file ...
file.close
rescue
file.close
fail # raise an exception
end
這是個笨辦法,當程式增大時,程式碼將失去控制,因為我們必須處理每乙個 return 和 break,.
為此,我們向"begin...rescue...end"體系中加入了乙個關鍵字 ensure. 無論begin塊是否成功,ensure程式碼域都將執行.
begin
file = open("/tmp/some_file", "w")
# ... write to the file ...
rescue
# ... handle the exceptions ...
ensure
end
可以只用ensure或只用rescue,但當它們在同一begin...end域中時, rescue 必須放在 ensure前面.
ruby 異常處理 ensure
當乙個方法結束工作時我們也許需要進行清理工作.也許乙個開啟的檔案需要關閉,緩衝區的資料應清空等等.如果對於每乙個方法這裡永遠只有乙個退出點,我們可以心安理得地將我們的清理 放在乙個地方並知道它會被執行 但乙個方法可能從多個地方返回,或者因為異常我們的清理 被意外跳過.begin file open ...
ruby 異常處理
size large 異常處理在程式中的作用理解 size 1.改變執行過程 丟擲異常後,就可以處理當前異常,使得程式馬上走異常處理分支,改變了主程式的執行邏輯 2.程式更加健壯 往往有很多邊界條件,開發或者設計的時候沒有考慮到,只有在除錯的過程中發現,因此發現這些邊界,然後新增異常處理,就更加能夠...
ruby 異常處理 rescue
乙個執行著的程式常會遇到意外的問題.乙個要讀取的檔案不存在 當希望存入一些資料時磁碟滿了 使用者可能輸入不恰當的資料.ruby file open some file err eval 1 in open no such file or directory some file 乙個健壯的程式會合理並...