【问题标题】:What's the Best Way to handle file and image loading exceptions?处理文件和图像加载异常的最佳方法是什么?
【发布时间】:2012-04-04 17:19:07
【问题描述】:

除了没有解决方案或替代方案(例如无法打开图像)之外,我通常会执行以下操作:

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

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

【问题讨论】:

    标签: c++ exception file-io exception-handling error-handling


    【解决方案1】:

    这取决于要求:

    • 如果程序由于缺少关键图像而无法继续运行,则应停止执行并通知用户发生了什么
    • 如果用户输入了错误的参数(例如,错误的文件名),应通知用户并要求重新输入
    • 如果它根本不重要,那么只需记录一条消息而不通知用户

    【讨论】:

      【解决方案2】:

      你应该做什么很大程度上取决于上下文。

      如果这样的代码被放置在一个处理程序中,比如文件|打开菜单选项,您正在打开图像文件,那么它似乎是可以接受的。

      另一方面,如果它被放置在应用程序的某些皮肤内部深处,那么这很可能是不好的。首先,您不知道何时执行此操作以及消息框是否合适。您不知道这将多久执行一次(如果这是 100 个图像之一,那么显示 100 个消息框是不好的......)。在致命的情况下,如果以某种方式显示消息框(或被用户关闭)会导致再次执行此代码,这可能会导致死循环。

      因此,除非您提供上下文,否则很难提供合理且有用的答案。


      还要注意,除非您知道load_from_file 的详细信息或其对image_loading_exception 内容的保证,否则向用户显示what() 不是一个好主意。该字符串很可能是(或可能)对用户无用且无法理解的技术信息。 (另一方面,如果这只是您或其他程序员的工具应用程序,那么它可能是可以接受的 - 再次上下文!)

      此外,除非您知道 image_loading_exception 会在其 what() 中执行此操作,否则您可以考虑捕获典型案例(丢失文件、拒绝访问、空文件、损坏的文件......)并显示专用(“面向用户”)消息可能会将what() 作为默认隐藏的详细信息或将其记录在某处。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 1970-01-01
        • 2021-02-22
        • 1970-01-01
        • 1970-01-01
        • 2019-01-30
        • 2018-12-03
        相关资源
        最近更新 更多