我在過去做過無數(shù)次,幾乎每次我都做錯了,甚至嘗試都是錯誤的。
文件權(quán)限(甚至文件存在)是易揮發(fā)-他們可以隨時改變。多虧了墨菲定律特別是包括從檢查文件時到嘗試打開文件之間的短暫時間。如果您所處的區(qū)域需要首先檢查,則更改的可能性更大。然而,奇怪的是,它永遠不會發(fā)生在您的測試或開發(fā)環(huán)境中,而這些環(huán)境往往是相當靜態(tài)的。這使得以后很難追蹤到這個問題,也使得這類bug很容易進入生產(chǎn)。
這意味著,盡管進行了檢查,如果文件權(quán)限或存在性很差,您仍然必須能夠處理異常。異常處理代碼是所需,是否預先檢查文件的權(quán)限。異常處理代碼提供全存在的功能或權(quán)限檢查。此外,雖然像這樣的異常處理程序被認為是緩慢的,但重要的是要記住磁盤I/O甚至更慢.一個羅得慢點.。調(diào)用.exist()函數(shù)或檢查權(quán)限將強制將文件系統(tǒng)刪除。
總之,在嘗試打開文件之前進行一次初始檢查是多余的,也是浪費的。異常處理沒有額外的好處,它實際上會損害,而不是幫助您的性能,它增加了成本,在更多的代碼,必須維護,它可以引入微妙的bug到您的代碼。做最初的檢查根本沒有好處。相反,這里正確的做法是嘗試打開文件,并在失敗時將您的精力投入到一個很好的異常處理程序中。即使您只是檢查文件是否存在,也是如此。這個推理適用于任何不穩(wěn)定的資源。