Каков наилучший способ обработки исключений при загрузке файлов и изображений? - PullRequest
4 голосов
/ 20 марта 2012

За исключением того, что нет решения или альтернативы, например, не удается открыть изображение, я обычно делаю что-то вроде:

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 голосов
/ 20 марта 2012

Это зависит от требований:

  • , если программа не может продолжить работу из-за отсутствия критического образа, она должна остановить выполнение и сообщить пользователю, что произошло
  • , еслипользователь ввел неправильный параметр (например, неправильное имя файла), его нужно проинформировать и попросить ввести его снова
  • , если это вообще что-то неважное, тогда просто зарегистрируйте сообщение, не сообщая пользователю
2 голосов
/ 20 марта 2012

То, что вы должны делать, сильно зависит от контекста.

Если такой код был помещен в обработчик, например, для пункта меню File | Open, когда вы открываете файл изображения, то это кажется приемлемым.

С другой стороны, если он был помещен глубоко в некоторые внутренние части скинов для вашего приложения, то, скорее всего, это плохо.Во-первых, вы не знаете, когда это будет выполнено и подходит ли тогда окно сообщения.Вы не знаете, как часто это будет выполняться (если это одно из 100 изображений, то показ 100 ящиков сообщений не годится ...).В фатальном случае это может привести к неработающей петле, если каким-либо образом показ окна сообщения (или отклонение его пользователем) приведет к повторному выполнению этого кода.

Поэтому, если вы не предоставите контекст, трудно предоставить разумный и полезныйответ.


Также обратите внимание, что, если вы не знаете подробности load_from_file или его гарантий для содержимого image_loading_exception, показывающего what() пользователю, не является хорошей идеей.Эта строка, скорее всего, будет технической информацией (или может быть) бесполезной и непонятной для пользователя.(С другой стороны, если это просто инструментальное приложение для вас или коллег-программистов, тогда оно может быть приемлемым - опять же контекст!)

Также, если вы не знаете, image_loading_exception сделает это в его what(), вы могли бырассмотрите возможность регистрации типичных случаев (отсутствующий файл, отказ в доступе, пустой файл, поврежденный файл, ...) и показа выделенного («ориентированного на пользователя») сообщения, при котором возможно, что what() будет скрыто по умолчанию, или где-то занесено в журнал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...