处理文件和图像加载异常的最佳方法是什么?

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 );
}

现在,这真的是很好的错误处理吗?我应该做一些更具描述性的事情,或者尝试解决问题。当处理图像或文件加载失败时,显示错误消息框是我能想到的唯一方法。你们都是怎么处理的?

2个回答

4

这取决于需求:

  • 如果程序无法继续,因为关键图像丢失,则应该停止执行并告知用户发生了什么
  • 如果用户输入了错误的参数(例如,错误的文件名),则应该通知他们并要求重新输入
  • 如果这不是很重要的事情,那么只需记录一条消息而不通知用户

2
您应该根据具体情况采取不同的措施。如果这段代码被放在处理程序中,例如文件打开菜单选项的处理程序中,打开图像文件时显示消息框似乎是可以接受的。但是,如果它被放置在应用程序皮肤设计的某些内部,则很可能是不好的。首先,您不知道何时会执行此操作以及是否适合使用消息框。您也不知道这将被执行多少次(如果这是 100 张图片之一,则显示 100 个消息框是不好的......)。在严重情况下,如果显示消息框(或用户解除消息框)会导致再次执行此代码,则可能导致死循环。因此,除非提供上下文,否则很难提供合理和有用的答案。
另外请注意,除非您了解 load_from_file 或其对 image_loading_exception 内容的保证,否则向用户显示 what() 不是一个好主意。这个字符串很可能是技术信息(或者可能是),对用户来说没有用处,也不容易理解。(另一方面,如果这只是您或其他程序员的工具应用程序,则可能是可以接受的 - 再次强调上下文!)
此外,除非您知道 image_loading_exception 将在其 what() 中执行此操作,否则您可以考虑捕获典型情况(例如缺少文件、访问被拒绝、空文件、损坏的文件等),并显示专用的(“面向用户”的)消息,可能将 what() 作为默认隐藏的详细信息或记录在某个地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接