通常情況下,使用者(包括使用者、程式碼庫的使用者)所引發的錯誤,需要透過異常機制來處理。因為異常發生的時候,原訂的執行流程就無法繼續,但對於使用者來講,他們不能因為這樣的錯誤就終止程式的使用,所以提供給程式設計者異常機制,讓設計者決定發生意外的時候應該做些什麼。而這種意外的產生原因是使用者,使用者的操作千千萬萬,導致的結果也可能千奇百怪,但是他們的操作若使得原有流程無法繼續,那麼就是異常。樓主說的判斷檔案先存在,再讀寫檔案,其實就是這個問題,按照程式的流程,可以保證在判斷是否存在的時候,檔案的存在性,但是不能保證在真正操作檔案的時候檔案的存在性(例如判斷的時候檔案還在,真正操作之前卻被使用者自己刪掉了)。因為流程上無法對流程外的使用者行為(使用者刪檔案)作出保證,所以需要異常機制。我認為,使用者在程式執行時觸發所導致的錯誤,需要異常機制來捕捉和處理。程式設計中還有一種叫斷言(ASSERT)的東西,這種機制是用來約束程式設計者的,例如某些庫的某些函式,在文件中約定了,這個函式的引數必須是>0,那麼你在程式設計的時候愣是硬生生輸入一個0,那麼這時候就應該選擇斷言,用於幫助程式設計者及早的發現自己程式中的錯誤(這種錯誤是設計上的錯誤所引發的,而非使用者的操作所導致的),而不是用異常機制去處理。所以,由程式設計師設計不足所導致的錯誤,需要用斷言來捕捉和處理。
通常情況下,使用者(包括使用者、程式碼庫的使用者)所引發的錯誤,需要透過異常機制來處理。因為異常發生的時候,原訂的執行流程就無法繼續,但對於使用者來講,他們不能因為這樣的錯誤就終止程式的使用,所以提供給程式設計者異常機制,讓設計者決定發生意外的時候應該做些什麼。而這種意外的產生原因是使用者,使用者的操作千千萬萬,導致的結果也可能千奇百怪,但是他們的操作若使得原有流程無法繼續,那麼就是異常。樓主說的判斷檔案先存在,再讀寫檔案,其實就是這個問題,按照程式的流程,可以保證在判斷是否存在的時候,檔案的存在性,但是不能保證在真正操作檔案的時候檔案的存在性(例如判斷的時候檔案還在,真正操作之前卻被使用者自己刪掉了)。因為流程上無法對流程外的使用者行為(使用者刪檔案)作出保證,所以需要異常機制。我認為,使用者在程式執行時觸發所導致的錯誤,需要異常機制來捕捉和處理。程式設計中還有一種叫斷言(ASSERT)的東西,這種機制是用來約束程式設計者的,例如某些庫的某些函式,在文件中約定了,這個函式的引數必須是>0,那麼你在程式設計的時候愣是硬生生輸入一個0,那麼這時候就應該選擇斷言,用於幫助程式設計者及早的發現自己程式中的錯誤(這種錯誤是設計上的錯誤所引發的,而非使用者的操作所導致的),而不是用異常機制去處理。所以,由程式設計師設計不足所導致的錯誤,需要用斷言來捕捉和處理。