飞镖中的'catch(e)'和'on Exception catch(e)'之间的区别?

时间:2020-03-15 13:13:32

标签: dart

在飞镖中catch(e)on Exception catch(e)有什么区别?

不带on子句的AVOID捕获。

使用不带on子句的catch子句会使您的代码易于遇到不会抛出的意外错误(因此不会引起注意)。

坏:

try {
 somethingRisky()
} catch(e) {
  doSomething(e);
}

好:

try {
 somethingRisky()
} on Exception catch(e) {
  doSomething(e);
}

链接:avoid_catches_without_on_clauses

1 个答案:

答案 0 :(得分:2)

} on Exception catch (e) {将捕获所有实现Exception的抛出对象。 排除大多数错误(实现Error

} catch (e) {将捕获所有抛出的对象,包括异常和错误-以及可能抛出的其他任何对象。大多数抛出的对象实现ExceptionError,但这只是一个约定。可以抛出任何非null对象。

我实际上也建议反对on Exception。异常不是错误,它们旨在作为函数来替代返回值,但是异常仍然是函数API的一部分,并且您仅应捕获实际打算处理的异常。由于Exception本身没有任何信息,因此您应该捕获该函数记录为抛出的子类型,以便可以使用可用信息来处理例外情况。 如果您不打算处理它,则最好将异常视为错误。

在某些情况下,仅使用} catch (e) {捕获所有内容是合理的,主要是在用于包装其他用户代码的框架代码中,并且需要确保用户代码错误或未处理的异常不会破坏整个程序。