dart 中“catch(e)”和“on Exception catch(e)”之间的区别?

Ham*_*med 5 dart

飞镖catch(e)on Exception catch(e)飞镖和有什么不一样?

避免在没有 on 子句的情况下捕获。

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

坏的:

try {
 somethingRisky()
} catch(e) {
  doSomething(e);
}
Run Code Online (Sandbox Code Playgroud)

好的:

try {
 somethingRisky()
} on Exception catch(e) {
  doSomething(e);
}
Run Code Online (Sandbox Code Playgroud)

链接:avoid_catches_without_on_clauses

lrn*_*lrn 10

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

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

我实际上也建议反对on Exception。异常不是错误,它们用于函数作为返回值的替代方法,但异常仍然是函数 API 的一部分,您应该只捕获您实际计划处理的异常。由于Exception它本身没有信息,您应该捕获函数记录为抛出的子类型,以便您可以使用可用信息来处理异常情况。如果您不打算处理它,您不妨将异常视为错误。

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