2012-03-20 76 views
4

因出現異常,有沒有解決方案或替代方案,例如無法打開的圖像,我通常是這樣的:什麼是處理文件和圖像加載異常的最佳方式?

try 
{ 
    img.load_from_file("my_image.png"); 
} 
catch(const image_loading_exception& e) 
{ 
    /* Could Not Load Image: 'my_image.png' ! */ 
    string err = "Could Not Load Image: " + e.what() + " !"; // 
    pro::message_box::show(err); 
} 

現在,這真的很不錯錯誤處理?我應該做一些更具描述性的,或嘗試解決問題。顯示錯誤消息框是我在處理圖像或文件加載失敗時唯一可以考慮的事情。你們做什麼?

回答

4

這要看什麼要求:如果用戶輸入錯誤的參數

  • 如果程序無法繼續,因爲一個關鍵的圖像丟失,那麼它就應該停止執行,並告知發生了什麼
  • 用戶(例如,錯誤的文件名),他們應該被告知並要求再次輸入
  • ,如果它的東西是不重要的話,那麼只要登錄一個消息,而無需通知用戶
2

你應該做什麼強烈取決於上下文。

如果這樣的代碼被放置在處理程序中用於說明打開圖像文件的文件|打開菜單選項,那麼它似乎是可以接受的。另一方面,如果它被放置在內部的某些內部應用程序中,那麼很可能這是不好的。首先,你不知道什麼時候會執行,如果消息框是適當的,那麼。你不知道這會被執行多少次(如果這是100張圖像之一,那麼顯示100個消息框不好...)。在致命的情況下,如果以某種方式顯示消息框(或由用戶解僱它)將導致再次執行該代碼,這可能導致死循環。

所以除非你提供上下文,否則很難提供合理和有用的答案。


還要注意的是,除非你知道的load_from_fileimage_loading_exception內容顯示what()給用戶的信息或它的擔保是不是一個好主意。這個字符串很可能是一個技術信息(或者可能是)對於用戶來說不是有用的和不可理解的。 (在另一方面,如果這是隻爲你或同事的程序員則是可以接受的工具應用程序 - !再次上下文)

而且除非你知道image_loading_exception會做,在其what()你可以考慮捕捉典型案例(失蹤文件,拒絕訪問,空文件,損壞的文件等)並顯示專用(「面向用戶」)消息,可能會將其作爲默認隱藏或隱藏在某處的詳細信息。

相關問題