程式語言中的那些異常處理和錯誤 小菜

2021-06-20 21:08:32 字數 3759 閱讀 3021

作為乙個小菜的我,雖然學業不精,但是到現在已經學習過程式語言visual basic、後來又利用一小點時間自學過c++、這些天接著又見識了c#……

那時候還沒有深刻的體會好好學習這幾個字,vb的總體框架還記得,c++由於是為了考試而在短時間內學的,所以基本都忘光了。是c#重新給了我希望,看著雖然像是乙個陌生的語言,但是漸漸的學下去的時候發現,它能讓我想起很多vb和c++忘記的東西,所以學起來也就開心了……

今天學到了c#中的異常處理機制。這讓我想起了c++、vb中都有相關的異常處理機制。

在程式設計編制的過程中,總是沒有辦法避免錯誤,然而,對於使用方法給引發的錯誤要在程式執行過程中盡可能作出處理,即異常處理。對於比較大的軟體來說,在程式測試的過程中也往往會出現錯誤,但是查詢錯誤要比改正錯誤難的多,所以,除錯的方法也很重要。

----------------

c#篇

首先,異常也是一種錯誤,它可導致程式不能正確執行,會出現系統崩潰等問題。所以,在程式的編制過程中,程式都必須處理可能出現的異常。

c#使用的方法是:採用異常類

exception

為每種錯誤提供定製的處理,並把識別錯誤的**和處理錯誤的**分離開來。一般要把程式的相關部分分為三種不同型別的**塊:

c#中的異常處理怎樣使用呢?

namespace yichangchuli

catch (indexoutofrangeexception ex)

catch (exception exc)

finally}}

}

2、丟擲異常

當你必須捕獲異常時,必須首先能夠引發異常。但是當不能引發異常時,可以通過

throw

方法引發異常,這

是為了告訴程式呼叫者,程式產生的錯誤結果由於他們的呼叫引起的。如

、c#中一些常用的異常類

異常類 描述

與引數有關的

argumentexception

引數錯誤:方法的引數無效

argumentnullexception

引數為空:給方法傳遞乙個不可接受的空引數

formatexception

引數的格式不正確

與成員訪問有關的

memberacces***ception

表示訪問類的成員失敗所引發的異常,原因可能是沒有足夠的訪問許可權,也可能是要訪問的成員根本不存在。

與陣列有關的

indexoutofrangeexception

下標超過陣列長度時

arraytypemismatchexception

檢視在陣列中儲存型別不正確的元素時

rankexception

如果使用了維數錯誤的陣列

與算術有關的

arithmeticexception

數學計算錯誤:由於數**算導致的異常,是乙個與算術有關的所有異常類的基類。

dividebyzeroexceptiong

表示整數或十進位制運算中檢視除以零時所引發的異常

關於溢位

overfolwexception溢位

stack

overfolwexception

棧溢位

4、c#中還提供了對程式編譯的兩種輔助手段,即跟蹤和除錯,用於檢出或發現程式中的錯誤。

(1)除錯

設定斷點除錯,

監視變數執行:在中斷方式下,可以設定監視,用於顯示變數的資訊。

逐語句和逐過程除錯

(2)跟蹤

使用asp開發應用程式是,一般講輸入輸出語句插入到**中,檢查變數或結構,斷言是否正確,或者只是通過應用程式的執行路徑進行的一般跟蹤。c#中提供了來自system.diagnostics命名空間下的處理跟蹤和斷言的兩個類:trace和debug。

------------ c++篇

在乙個小的程式中,可以用比較簡單的方法處理異常。但是在乙個大的系統中,如果在每乙個函式中都設定處理異

常的程式段,會使程式過於複雜和龐大。因此,

c++採取的辦法是

:如果在執行乙個函式過程中出現異常,可以不在本函式中立即處理,而是發出乙個資訊,傳給它的上一級

(即呼叫它的函式

),它的上級捕捉到這個資訊後進行處理。如果上一級的函式也不能處理,就再傳給其上一級,由其上一級處理。如此逐級上送,如果到最高一級還無法處理,最後只好異常終止程式的執行。

這樣做使異常的發現與處理不由同一函式來完成。

好處是使底層的函式專門用於解決實際任務,而不必再承擔處理異常的任務,以減輕底層函式的負擔,而把處理異常的任務上移到某一層去處理。這樣可以提高效率。

c++處理異常的機制是由

3個部分組成的:

即檢查(try)

、丟擲(throw)

和捕捉(catch)

。把需要檢查的語句放在

try塊中,

throw

用來當出現異常時發出一

個異常資訊,而

catch

則用來捕捉異常資訊,如果捕捉到了異常資訊,就處理它。

(1)throw

語句一般是由

throw

運算子和乙個資料組成的,其形式為

throw 

表示式;

(2) try-catch

的結構為

trycatch(

異常資訊型別 

[變數名

])------------ vb篇

vb程式中也會有錯誤的出現,但是vb中提供了一些處理錯誤的方法。

使用on error goto語句在乙個過程中指定錯誤處理**所在。接著

on error goto語句關閉錯誤陷阱,然後on error resume next 語句用來改變錯誤陷阱,相當於乙個跳轉語句,仍能保持程式繼續執行,跳過錯誤的**程式塊。

我自己體驗過的錯誤處理就上面乙個,當然強大的vb還有很多處理錯誤的方式。下面是在網上搬下來的:

利用vb的編譯選項

,vb有兩個設定項會在很大程度上影響我們建立非常堅實的**的能力。乙個設定項是compile on demand(按需要進行編譯),另乙個設定項是background compile(後台編譯)。可以開啟options對話方塊,選定general選項卡,然後對這兩個設定項進行設定。當選定compile on demand時,如果單擊工具欄上的run按鈕,或者按f5鍵,vb並不全面編譯我們的專案。相反,只在引用過程時,才對這些過程進行編譯。使用compile on demand,通常可使比較大的專案或者速度較慢的計算機上的專案能夠更快地啟動執行,但是它也會產生某些不被注意的編譯錯誤。在發現和糾正所有編譯錯誤之前,不能將專案編譯成.exe或.dll之類的可發布檔案,因此,選定compile on demand並不能夠發布帶有編譯錯誤的**。但是,選定compile on demand後,會導致編譯錯誤隨著時間的推移而不斷增加,從而在最後試圖進行全面編譯時,迫使我們對**進行大量的糾錯。如果在ide中除錯專案,vb常常必須停止(不只是暫停)執行,以便進行糾錯操作。這使得除錯正在執行的專案時對大量編譯錯誤的糾正操作變得非常麻煩。如果能夠在合理的時間內全面編譯專案,那麼可以考慮關閉compile on demand。也可以使compile on demand保持選定狀態,但是要定期按ctrl+f5鍵,以便重新執行我們的專案。這使我們在程式設計時能夠定期糾正編譯錯誤,而不必一次性糾正大量的編譯錯誤。

GO語言中的異常處理

go語言內建了乙個簡單的錯誤介面作為一種錯誤處理機制,介面定義如下 type error inte ce 它包含乙個 error 方法,返回值為string go的error構造有兩種方式,分別是 第一種 errors.new err errors.new this is an error if e...

D語言中的錯誤處理

所有的程式都要應付錯誤。錯誤是不在程式正常操作範圍內的異常情況 c 語言檢測報告錯誤的傳統方法並沒形成傳統,每個函式都有自己的方法,包括 為了處理可能出現的錯誤,必須為每個函式新增繁瑣的錯誤處理 如果發生了錯誤,必須有錯誤恢復 並且需要有 將錯誤以某種友好的方式告訴給使用者。如果不能在發生錯誤的區域...

Python 的錯誤和異常處理

python 的語法錯誤或者稱之為解析錯,如下 while true print hello world file line 1,in while true print hello world syntaxerror invalid syntax 在此例中,函式 print 被檢查到有錯誤,是它前面...