在使用io流時,會遇到很多方法會丟擲異常。對於這些異常,我們不應該簡單的將其丟擲,而是應該進行一些處理。
public class test
}
這個簡單的程式中的三行**用於將一句字串寫入檔案中然後關閉資源。但是這三句話都會丟擲異常。所以將這三行**放入try-catch 中。因為這三行**有緊密的聯絡,所以放入同乙個try中。
public class test catch(ioexception e)
}}
編譯通過。乍看上去似乎沒有問題,但是細細一想就會發現:如果前兩行**有一行出現異常,那麼後面的關閉資源就不會執行,而是直接執行catch中的處理**,這樣,資源不是關閉釋放。所以要將關閉資源的**放到finally中。
public class test catch(ioexception e)finally
}}
將程式改為如上,這時fw.close()這句**編譯失敗。因為fw定義在try中,是個區域性變數,在finally中不可以引用到try中的區域性變數。所以要提公升fw的訪問範圍。但是又不能將fw的整句**放到try外面,因為filewriter的構造器也會丟擲異常。所以將fw的定義放在try外面而將初始化放在try中。
public class test catch(ioexception e)finally
}}
這樣,再次編譯,fw.close還是編譯失敗。因為close方法也會出現異常,所以要在finally中使用try-catch
public class test catch(ioexception e)finally catch (ioexception e)
} }}
再次編譯,不會出現編譯失敗,而且也可以正常執行。但是還需仔細分析:如果在fw的初始化出現異常,比如檔案的位置儲存在不存在的k盤,那麼初始化失敗,丟擲異常。這時,finally是一定執行的**,即close方法一定會執行,但是fw並沒有初始化,關閉動作肯定失敗。所以要在關閉的前面加上乙個判斷,判斷fw是否初始化。
最終我們將**修改如下:
public class test catch(ioexception e)finally catch (ioexception e)
} }}
當然,在實際開發中還要增加catch中的實際異常處理**而不是簡單的列印。
IO異常的處理
之前的入門練習,我們一直把異常丟擲,而實際開發中並不能這樣處理,建議使用try.catch.finally 塊,處理異常部分 演示 public class handleexception1 catch ioexception e finally catch ioexception e 還可以使用j...
python 檔案I O與異常處理
open函式 file object open file name access mode buffering 各個引數的細節如下 1 file name file name變數是乙個包含了你要訪問的檔名稱的字串值。2 access mode access mode決定了開啟檔案的模式 唯讀,寫入,...
python之異常處理 Python之異常處理
異常物件 請大家執行如下 a 100 0 print a 就會發現直譯器顯示如下的錯誤提示 traceback most recent call last file x.py line 1,in a 100 0 zerodivisionerror division by zero 大家要學會看直譯器...