Брошенное исключение не перехватывается в предложении `on` (тип, похоже, неверный) - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть асинхронный метод с блоком try catch, и он вызывает другой метод asyn c, который выбрасывает. Моя проблема в том, что выброшенное исключение не перехватывается в блоке перехвата.

Future savePlayer(Player player) async {
  try {
    var store = await SharedPreferences.getInstance();
    await store.setString(_playerId, jsonEncode(player.toJson()));   // exception in player.toJson() "NoSuchMethod"
  } on Exception catch (err) {
    throw LocalStorageException(                                     // no catch here
        message: TextConstants.exception.localStorageSaveException,
        hint: TextConstants.exception.localStorageSaveExceptionHint,
        originalExceptionText: err.toString());
  } catch (err) {
    throw LocalStorageException(                                     // catch here, but why?
        message: TextConstants.exception.localStorageSaveException,
        hint: TextConstants.exception.localStorageSaveExceptionHint,
        originalExceptionText: err.toString());
  }
}

Если я удаляю on Exception и просто использую catch, то это работает. Это был бы верный обходной путь для меня. Но так как я использую правила кодирования Effective Dart, я получаю предупреждение, когда опускаю условие on.

https://dart-lang.github.io/linter/lints/avoid_catches_without_on_clauses.html

Как правильно отлавливать ЛЮБОЕ исключение в блоке catch с предложением on?

1 Ответ

1 голос
/ 05 апреля 2020

on Exception ловит объекты типа Exception.

. Выдается NoSuchMethodError, то есть Error. Error с не являются Exception с (и наоборот).

Дарт различает ошибки времени выполнения и логические ошибки (ошибки программиста). Ошибки во время выполнения должны происходить от Exception; логические ошибки должны происходить из Error.

Эффективный дротик препятствует отлову Error. Обычно они представляют собой программную ошибку, которой можно и нужно было избежать (например, вызов несуществующей функции).

...