線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1801
推到 Plurk!
推到 Facebook!

try catch 的一個簡單問題

尚未結案
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-10 00:54:01 IP:61.217.xxx.xxx 未訂閱
想問一個笨問題:    當利用 try catch 來捕捉錯誤的時候,如何能在 catch 完錯誤後直接回到 try 再繼續進行處理呢?    小弟很直覺想到的第一個作法就是 GOTO 但是實在很不想用這個東西,不然就是用一個變數來記錄是不是有被 catch 過,若有則回到 try 來繼續試下去,當然這些都是可行的,但是否有方法可以設定讓 catch 完錯誤自動回到 try 處理呢,呵,問的似乎有點怪,但是想瞭解各位前輩們都是如何完成錯誤捕捉的ㄋ 
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-10 02:19:04 IP:61.228.xxx.xxx 未訂閱
我的方法是把 try catch 寫在一個 function 中, 還是要一個變數去記錄 status, 放在 do while 中呼叫.    Jesse Chan
------
Jesse Chan
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-11 12:01:56 IP:61.231.xxx.xxx 未訂閱
拒用 goto!!
我以前也認為 goto 是可「最好不要用」的指令,但會有這樣的觀念,卻不一定是對的,大部分的 C/C 設計者都會認為
又不是 BASIC 幹嘛用 goto!!
(我許只有以前的我這樣認為,因為一開始學 BASIC、Fortran.. 後來才學 C) 但如果真的不需要用 goto 那 C/C 為何要有這個保留字呢? 在真正需要用的 goto 的場合,就大膽用它,小心檢視有無 bug 就好。 在真正需要用的 goto 的場合,如果「故意」不用,則必需以 do{}while(); 或 while(){} 的假 LOOP,程式碼看起來不見得好看。 我現在已不反對在我的程式碼中有個 goto 了 <>沒空更新的網頁... href="http://big5.to/吃軟也吃硬">http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-11 12:05:36 IP:61.231.xxx.xxx 未訂閱
對不起,離題太遠... < >< > 其實, try catch 可以多層次
  try
  {
    ...
    ...<可能 exception 的點>
gotoHere:
    ...
  }
  catch(...)
  {
    ...
    ...
    goto gotoHere;
  }
改成
  try
  {
    ...
    try
    {
       ...<可能 exception 的點>
    }
    catch(...)
    {
       ...
    }
    ...
  }
  catch(...)
  {
    ...
  }
這樣就不用 goto 了。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-11 12:58:32 IP:61.216.xxx.xxx 未訂閱
依 jessechan 版主建議的,把 try 獨立放在一個 function 中,也 是不錯的作法,寫個小遞迴給他,也可以免去用 GOTO 或 WHILE ㄉ 困擾,而且程式看起來也蠻清爽的...  呵,記得以前在學校老師都說,用 > 不過經 > 嗯 ... 兩個
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-11 13:28:57 IP:61.218.xxx.xxx 未訂閱
可以參考這一篇瞭解一下    Creating, Throwing and Catching Your Own Custom Exceptions http://www.temporaldoorway.com/programming/cbuilder/techniquesandpatterns/customexceptions.htm    聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-11 14:18:31 IP:61.231.xxx.xxx 未訂閱
引言: 嗯 ... 兩個 try 就會產生迴圈的作用ㄇ,小弟仍有點不太清楚耶 ... 可否請版主大人稍微解釋一下ㄋ
兩個 try 不會有迴圈的作用。 你可以把它看成叫用一個函式內含 try catch。 另外,如果內圈的 catch 沒有「全部 catch」下來,則 exception 還是會由其外層 catch ,同理,如果外層也沒有全部 catch 下來,而發生的 exception 不在 catch 範圍內,那就再由更外層去 catch 如果已沒有最外層,則最後會出現像是沒有加 try catch 的 Exception 視窗。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-11 14:26:28 IP:61.231.xxx.xxx 未訂閱
引言: 嗯 ... 兩個 try 就會產生迴圈的作用ㄇ,小弟仍有點不太清楚耶 ... 可否請版主大人稍微解釋一下ㄋ
兩個 try 不會有迴圈的效果。 你可以把內層的 try 視為 jessechan 版主所說的另一個函式。 而多層的 try 如果每一層所 catch 的不是全部的訊息,則有可能內層發的 exception 內層沒有 catch 到而由外層 catch 或外層也沒有 catch 到,則由系統發 Exception 訊息視窗。 P.S. 最近常常回應後,就斷線,文章都不見 < >< >< > 有時真的很懶得重打 < > 沒想到是已上傳回應後才斷線... 真是傷腦筋... 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell.... 發表人 - dllee 於 2003/04/11 14:31:35
------
http://www.ViewMove.com
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-11 16:11:19 IP:61.216.xxx.xxx 未訂閱
dllee 版主,你用哪家的線路呢~呵    小弟的發言都先打在筆記本(留下來備查),然後才貼上來,所以不會有這主困擾,幾位版主都給予小弟很大的幫助,真的謝謝你們! 發表人 -
系統時間:2024-04-27 13:11:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!