異常和執行失敗有什麼區別?

2025-06-09 06:36:22 字數 1732 閱讀 8830

1樓:我為師洋狂

‍執行失敗。這個術語指的是乙個非常嚴重的情況:程式已經產生了諸如段錯誤、非法指令等致命問題,無法自己執行下去,只能靠作業系統干預,強行中止。

這種現象是我們常說的程式崩潰(crash)。如果作業系統本身出現了這種問題,就表現為系統崩潰和宕機等現象。而無論是返回錯誤碼,還是使用異常,廣義上說,都是程式自身正常流程的一部分,並沒有上述致命問題。

即使因為未處理異常而導致程式退出,同樣也是依靠程式自身的流程,不需要作業系統額外干預。嚴格說來,這種情況其實不能算是真正崩潰(crash),只是程式自行退出。當然,意思是要問使用異常和返回錯誤碼有什麼區別。

從功能上來說,他們都可以做到底層發現問題->報告錯誤訊息->上層接收訊息->處理問題這幾件事。絕大多數場合下,兩種辦法都可以,靠你自己去選擇。兩種都用也是可以的。

通常來說,處理不正常的情況孝拍謹,建議使用異常。因為異常是專為報告錯誤而設計的語言特性,返回值則不是。異常會有一些獨有的優勢。

向上傳播異常不需要你寫額外的**。異常使用的是乙個獨立的傳播途徑,不需要佔用你的返巧基回值,因此不需要專門設計特定的返回值來指示錯誤。異常可以是乙個相當複雜的物件。

如果你需要攜帶很多資訊,異常比返回值方便。異常可以是類物件,而類物件擁有多型性,這方賀絕便你控制錯誤處理的粒度。你可以精確處理filenotexist這樣的錯誤,也可以簡單地將ioerror統一處理。

某些場合下(如c++建構函式)是沒有返回值的,要第一時間報告錯誤,只能使用異常。

2樓:網友

‍異常的實現需要儲存異常丟擲點到異常捕獲點的必要資訊,這是人們詬病異常效能的主要依據。但是這是錯誤的。手工按照返回錯誤的風格取得行為等價於異常的實現效能絕大多數時候比不上語言內建的異常的效能。

對於支援原生異常的os,如windows,這個差距尤其明顯;對於非基於棧的呼叫實現,異常和返回錯誤效能幾無差別,只是風格不同而已。一般來說,需要用特別返回值來標識錯誤,意味著需要過載特定值得含義。假設乙個操作會返回乙個int型值,因為其不可能返回負數(如求絕對值),我們一般可唯衝纖以使用-1來作為操作失敗(如函式庫呼叫載入錯誤)的指示。

1在int型別中判凱並無特別含義,然而我們這裡強制施加了語義,而這種語義是弱的。沒辦法通過類指仿型系統檢查來確保正確性。

3樓:網友

‍異常是一種安全的分支處理技術。因為它和錯誤處理密切相關,人們容易直接把異常看成是錯誤處理,連名字「異常」都帶著濃濃的錯誤的含義。但是這是乙個誤解。

異常的理論基礎是假設某鬥純些分支處理中,乙個分支和其它分支比起來發生的非常不頻繁。與其空行咐平等地針對常見和極其罕見的帶襲情形進行處理(想一下,正常處理**和錯誤處理**往往一樣多,大部分情況下後者其實更多),不如僅僅處理正常的情形,把不常見的情形歸於一處統一處理。這樣我們書寫**的時候僅僅關注正常情形就可以了。

發生錯誤的時候,特別的流程會幫助程式設計師直接回到定義了錯誤處理的地方。

4樓:網友

「異常」是乙個比較專業的名詞,而「執行失敗」更像是一種籠統表述,所以覺得不能從定義上闡述差異。下面說些個人觀點。

異常」,exception,本意傾向於「意料之外」。比如呼叫乙個加法函式,你「期待」得到乙個確切的結果,但返回了null,這不符合預期。還比如,你調乙個api,「期待」得到。

json,但返回了乙個404頁面的html原始碼,這也不符合預期。 但這些操作都「執行成功」了,它們是「異常」。

至於「執行失敗」,則可以理解為error。比如服務啟動失敗,比如**執行時記憶體溢位crush了,等等。

和有什麼區別和有什麼區別?日語

和 的區別為 指代不同 用法不同 側重點不同。一 指代不同 1 有。2 所有。二 用法不同 1 基本意思是 有 指物質上的所有 身心上的具有或構成上的含有。引申可作 享有 容許 招致 等解。基本的 意味 有 物質上 心身上 有 構成上 含有 指 享有 許容 招來 解 2 基本意思是 佔有,擁有 指人...

讀和有什麼區別, 抱 讀 和 有什麼區別?

和 其實一個意思,較正式,用於書面形式,較文學化。就好像寫信與致函。但如果是要說抱有某些想法的時候,就要用 而不能用 抱 抱 摟 抱 除有抱 摟的意思外,還有懷有 懷抱的意思。比如 心懷大志 大 志 抱 前者指抱著抽象的物質 比如希望 後者指抱著實際的物質 比如小孩 一 區別 1 抱 是抱嬰兒等比較...

海和洋有什麼區別,洋和海有什麼區別,怎樣區別

為什麼都說望洋興嘆,而不是望海興嘆,海和洋到底有什麼區別?海比洋小!這是最大的區別!洋和海有什麼區別,怎樣區別 海洋,是地球上最廣闊的水體的總稱。地球表面被各大陸地分隔為彼此相通的廣大水域稱為海洋,海洋的中心部分稱作洋,邊緣部分稱作海,彼此溝通組成統一的水體。洋與海的主要區別 一 主次不同 1 洋是...