簡體   English   中英

catch(...)總是有意義嗎?

[英]Does catch(…) always make sense?

捕獲每個異常只是為了確保總是有意義嗎? 例如:

try
{
    Socket_Listen();

    if(Return_Value == SOCKET_ERROR)
    {
        throw SOCKET_LISTEN_ERROR;
    }

    __LOG__ << "Listening..." << endl;
}

catch(EError_ID)
{
    __LOG__;
    Get_Last_Error_As_String( __FUNCTION__ );
}

catch(...)
{
    __LOG__ << "WARNING: An unknown error occurred." << endl;
}

我拋出自己定義的錯誤( SOCKET_LISTEN_ERROR ),它是包含多個錯誤ID的較大枚舉的一部分。 除了我拋出的異常之外,這里是否還有其他異常拋出? 為了完整起見,這是Socket_Listen()

void CTCPServer::Socket_Listen()
{
    Return_Value = listen( Socket,
                           2 ); 
}

相反,捕獲每個異常很少有意義。 當您退出catch塊(不重新拋出)時,您是在告訴周圍的代碼該異常已解決,程序可以繼續正常運行。

當您在不了解異常的情況下捕獲所有異常時,就無法斷言一切都是正常的。 忽略意外異常總比吞沒異常更好。 讓呼叫者擔心它們(可能是讓他們轉到呼叫者的呼叫者,依此類推)。

您詢問是否可以從該代碼中引發其他任何異常。 我不知道,你也不知道,所以抓住他們當然是沒有意義的。 如果測試發現其他種類的異常,並且該位置是處理它們的正確位置,則添加代碼以在那里處理它們。 但是,在知道期望的內容之前,請刪除全部捕獲異常處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM