我有一个带有try catch块的异步方法,它调用了另一个引发的异步方法。我的问题是抛出的异常未在catch块中捕获。
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
,那么它将起作用。这对我来说是一个有效的解决方法。但是由于我使用的是有效Dart编码规则,因此在省略on子句时会收到警告。https://dart-lang.github.io/linter/lints/avoid_catches_without_on_clauses.html
在带有
on
子句的catch块中捕获ANY异常的正确方法是什么?
最佳答案
on Exception
捕获Exception
类型的对象。
被抛出的是一个 NoSuchMethodError
,这是一个 Error
。 Error
不是Exception
(反之亦然)。
Dart区分运行时错误和逻辑错误(程序员错误)。运行时错误应源自Exception
;逻辑错误应源自Error
。
Effective Dart discourages catching Error
。它们通常表示可能会并且应该避免的编程错误(例如,调用不存在的函数)。
关于flutter - `on`子句未捕获引发的异常(类型似乎错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61033298/