首页 > 解决方案 > 建议 on 和 catch 的排列顺序是什么?

问题描述

在 on 和 Catch 之间,哪个先执行,推荐什么顺序?

void doSomeApiCall() {
  try {
    //make http request
  } on SocketException {} catch (e) {
    //do something.
  }
}

应该先?有推荐的顺序或方法吗?订单对代码有什么影响?

标签: flutteroopdarttry-catch

解决方案


on子句按顺序处理,第一个匹配抛出异常类型的子句将被执行。如果异常与任何子句都不匹配,则将执行裸catch子句(即不带) 。onon

您无法选择 and 之间的相对on顺序catch;试图将子句放在catch子句之前on将是语法错误。

注意写作:

void doSomeApiCall() {
  try {
    //make http request
  } on SocketException {} catch (e) {
    //do something.
  }
}

不同于:

void doSomeApiCall() {
  try {
    //make http request
  } on SocketException catch (e) { // No empty block before `catch`.
    //do something.
  }
}

第一个版本捕获 throws SocketException,但空块对它们没有任何作用。裸catch子句捕获所有其他抛出的异常并执行该//do something块。

第二个版本//do something只对被捕获SocketException的块执行块,其他所有异常都不会被捕获。

另外,请注意,不鼓励使用裸catch子句 withouton


推荐阅读