Dart 投掷和重投有什么区别?

问题描述 投票:0回答:3

这可能是显而易见的,但我仍然无法理解

throw
rethrow
之间的区别以及何时应该使用其中任何一个?

flutter exception dart try-catch throw
3个回答
24
投票

根据有效飞镖

如果您决定重新抛出异常,最好使用

rethrow
语句,而不是使用
throw
抛出相同的异常对象。
rethrow
保留异常的原始堆栈跟踪。
throw
另一方面将堆栈跟踪重置到最后抛出的位置。

最大的区别是保留原始堆栈跟踪。


他们提供了 2 个示例来展示预期用途:

坏:

try {
  somethingRisky();
} catch (e) {
  if (!canHandle(e)) throw e;
  handle(e);
}

好:

try {
  somethingRisky();
} catch (e) {
  if (!canHandle(e)) rethrow;
  handle(e);
}

2
投票

回复有点晚了,但我想这会对现在或将来的人有所帮助。 处理异常的抛出和重新抛出。

当您遇到异常并在代码中启动引发异常的过程时,将使用

throw
关键字。更多的是表明发生了异常。

当您想要将异常向上传播到堆栈时,可以使用

rethrow
关键字。更像是捕获异常并执行一些处理并传播到堆栈内的更高级别处理程序。

总结

throw

  • 用于异常的创建和发出信号。

rethrow

  • 用于捕获异常并可能在被视为低级别的点进行处理,然后将相同的异常传播到更高级别的处理程序。
  • 善于处理多个级别的异常,并且仍然保留原始异常,对于调试和故障排除有价值。

0
投票

throw 用于发起异常。它可以在代码中任何适合异常的地方使用。 rethrow 在 catch 块中使用以重新抛出捕获的异常。它允许您在调用堆栈的某一级别处理异常,然后将其传递以进行进一步处理。

© www.soinside.com 2019 - 2024. All rights reserved.