C 中關於try catch的異常捕獲問題

2021-10-21 08:56:36 字數 1666 閱讀 7111

在平日工作裡,我們的有時候需要對**進行異常捕獲,那麼我們就需要了解到try-catch語句。

首先,我們通過如下面**可以知道throw是將該異常丟擲,即test()中存在異常,由test()捕獲並丟擲,並在main中接收到並處理。在test()中的throw下方的console.writeline並未執行。那麼我們可以得出如下結論:

結論1:

throw中的異常被丟擲後,該異常被外層呼叫處接收。

且t

hrow

下方**不被

執行

示例一

其次,我們將示例一中的第31行進行修改,那麼得出如下結果,main的catch沒有執行,原因是因為異常被test中的catch捕獲,並處理了,由於自行處理了,且並未將該異常往外拋,則出現main中無任何異常捕獲。

結論2:catch捕獲後,若自行處理,則不會對外由任何影響;若通過throw往外拋,則會由外層再次捕獲到。

示例二

接著,我們在示例二再做修改,如下圖所示,test()捕獲異常後,先自行處理,再通過throw直接丟擲,我們會發現真正錯誤的第26行的堆疊資訊被丟失了。而外層main中只報了第32行處有錯,並未直接指出錯誤的本身是第26行導致的。

結論3:當乙個異常由throw直接被丟擲,那麼再次接收到的異常會存在堆疊資訊的缺失。

示例三:

最後,我們將示例三中的**進行修改,如下圖所示,我們在test()中的catch中捕獲到異常後,在throw丟擲時,我們建立了新的自定義異常new exception("錯誤的堆疊資訊:",e),並將原始的異常作為innerexception,所以異常資訊中包含了多個層次的異常資訊。

結論:當異常資訊通過throw丟擲後,我們應該採用 new

exception(string message, exception innerexception)方式丟擲,這樣保證堆疊資訊的完整,能快速定位出異常的具體位置。

C 中的try catch異常捕獲

try catch 這和括號裡面的引數是表示的這個catch語句裡面要對應處理的錯誤型別及其引數 finally 然後再程式 a中我們可以寫乙個 catch 語句來截獲這個錯誤,並作出相應的處理 catch indexoutofrangeexceptione 錯誤的種類 算術異常類 arithmet...

c 異常處理 try catch

初學 try catch 語法 try try和catch之間不能有其他的 catch 技巧 console.writeline 你的語文成績?int chainese 0 宣告變數再初始化賦值為0,因為在try中宣告作用域只能在try中的大括號中有效.bool chaineseexecption ...

php中try catch捕獲異常

php中try catch 語句概述 php5新增了類似於其它語言的異常處理模組。在 php 中所產生的異常可被 throw語句丟擲並被 catch 語句捕獲。注 一定要先拋才能獲取 需要進行異常處理的 都必須放入 try 塊內,以便捕獲可能存在的異常。每乙個 try 至少要有乙個與之對應的 cat...