熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:異常處理與程序調試(二)[1]

2013-11-23 17:50:26  來源: Delphi編程 

   異常響應

  異常響應為開發者提供了一個按自己的需要進行異常處理的機制try …except …end形成了一個異常響應保護塊與finally不同的是正常情況下except 後面的語句並不被執行而當異常發生時程序自動跳到except進入異常響應處理模塊當異常被響應後異常類自動清除

  下面的例子表示了文件打開刪除過程中發生異常時的處理情況

  uses Dialogs;

  var

  F: Textfile;

  begin

  OpenDialogTitle := Delete File;

  if OpenDialogExecute then

  begin

  AssignFile(F OpenDialogFileName)

  try

  Reset(F)

  if MessageDlg(Erase +OpenDialogFileName + ?

  mtConfirmation [mbYes mbNo] ) = mrYes then

  begin

  SystemCloseFile(F)

  Erase(F)

  end;

  except

  on EInOutError do

  MessageDlg(File I/O error mtError [mbOk]

  on EAccessDenied do

  MessageDlg(File access denied mtError [mbOk]

  end;

  end;

  end

  保留字on…do用於判斷異常類型必須注意的是except後面的語句必須包含在某一個on…do模塊中而不能單獨存在這又是同finally不同的一個地方

   使用異常實例

  上面所使用的異常響應方法可總結為如下的形式

  on ExceptionType do

  {響應某一類的異常}

  這種方法唯一使用的信息是異常的類型一般情況下這已能滿足我們的需要但我們卻無法獲取異常實例中包含的信息比如異常消息錯誤代碼等假設我們需要對它們進行處理那麼就必須使用異常實例

  為了使用異常實例需要為特定響應模塊提供一個臨時變量來保存它

  on EInstance : ExceptionType do  …

  在當前響應模塊中我們可以象使用一個普通對象那樣來引用它的數據成員但在當前響應模塊之外不被承認

  下面的代碼用於獲取異常消息並按自己的方式顯示它

  {窗口中包括一個ScrollBar部件一個Button部件}

  procedure TErrorFormButtonClick(Sender: TObject)

  begin

  try

  ScrollBarMax := ScrollBarMin;

  except

  on E: EInvalidOperation do

  MessageDlg(Ignoring Exception:+EMessage

  mtInformation[mbOK]

  end;

  end;

   提供缺省響應

  在異常響應模塊中一般我們只對希望響應的特定異常進行處理如果一個異常發生而響應模塊並沒有包含對它的處理代碼則退出當前響應模塊異常類仍被保留

  為了保證任何異常發生後都能在當前響應模塊中被清除可以定義缺省響應

  try

  {程序正常功能}

  except

  on ESomething do

  {響應特定異常}

  else

  {提供缺省響應}

  end;

  由於else可以響應任何異常包括我們一無所知的異常因此在缺省響應中最好只包括諸如顯示一個消息框之類的處理而不要改變程序的運行狀態或數據

   響應一族異常

  諸如

  on ExceptionType do

  的異常響應語句不僅可響應本類異常而且可以響應子類異常對於象EIntErrorEMathError等系統不會引發的異常它們將只響應其子類異常而對於象

  on Exception do

  這樣的語句將會對任何異常進行響應

  下面一段代碼對整數越界異常進行單獨處理而對其它整數異常進行統一處理

  try

  {整數運算}

  except

  on ERangeError do

  {越界處理}

  on EIntError do

  {其它整數異常處理}

  end;

  由於異常在處理後即被清除因而上面的代碼可保證不會使ERangeError異常被多次處理假如顛倒兩條響應語句的順序則ERangeError異常響應將永遠沒有被執行的機會

  由於異常在處理後即被清除因而當希望對異常進行多次處理時就需要使用保留字raise來重引發一個當前異常

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25188.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.