Я правильно использую try catch? - PullRequest
0 голосов
/ 13 октября 2019

Мне нужна помощь по правильному использованию try/catch. В следующем примере я использую API Google Tasks, но это не главное.

Итак, вот мой текущий код:

try
{
    // try something that could cause an exception
    Task result = service.Tasks.Patch(body, listId, taskId).Execute();
}
catch (Google.GoogleApiException ex)
{   
    // handle exception
    Debug.WriteLine("exception");
}

Этот код пытается что-то сделать, и я ловлювозможные исключения. Теперь вместо вывода сообщения только при возникновении ошибки (в блоке catch) я также хочу выводить сообщение, когда все в порядке. Я не уверен, однако, где поместить такое сообщение?

  • Если я помещаю сообщение об успехе в блок finally, оно всегда отображается, даже если есть ошибки
  • Если я помещаю сообщение об успехе после try/catch и, возможно, finally, он всегда отображается, даже если есть ошибки

Итак, я бы поместил сообщение об успехе в блок try, как это?

try
{
    // try something that could cause an exception
    Task result = service.Tasks.Patch(body, listId, taskId).Execute();
    Debug.WriteLine("task updated successfully"); // <------------------ success message
}
catch (Google.GoogleApiException ex)
{   
    // handle exception
    Debug.WriteLine("exception");
}

Мое понимание былочто try содержит только код, который может дать сбой, и, очевидно, Debug.WriteLine("task updated successfully"); - это ничего, что может дать сбой, но он все еще включен в блок try. Пожалуйста, дайте мне знать, если мое понимание блока try, содержащего только код, который может дать сбой, было неверным, и нормально ли включать сообщение об успехе в блок try или каков наилучший метод для моего варианта использования.

1 Ответ

1 голос
/ 13 октября 2019

Нет, вам не нужно включать только код, который может не работать в блоке tryВы также должны включить код, который требует этого вызова для успеха. Например, если вам нужно подключиться к базе данных и выполнить несколько запросов, вы бы сделали все это в блоке try.

Возможно, вы захотите включить второй блок catch для перехвата других исключений. Просто случайная мысль.

...