Flutter/Dart - 异常处理

异常处理

dart 使用经典的try-catch处理异常,使用关键字throw抛出一个异常。

抛出异常

首先,看看如何抛出异常

main(List<String> args) {
  divide(100, 0);
}
 
divide(int a, int b) {
  if (b == 0) {
    throw new IntegerDivisionByZeroException();
  }
  return a / b;
}

当b变量的值为0的时候,抛出一个内置的异常IntegerDivisionByZeroException。
你也可以在异常中携带一个字符串信息。

main(List<String> args) {
  divide(10, 0);
}
 
divide(int a, int b) {
  if (b == 0) {
    throw new Exception('Divide by zero');
  }
  return a / b;
}

捕获和处理异常

接着来看看重点的捕获和处理异常。
某种类型的异常可以通过on关键字捕获,如下:

main(List<String> args) {
  try {
    divide(10, 0);
  } on IntegerDivisionByZeroException {
    print('Division by zero.');
  }
}
 
divide(int a, int b) {
  if (b == 0) {
    throw new IntegerDivisionByZeroException();
  }
  return a / b;
}

如果你不知道抛出异常的类型,或者不确定,可以使用catch块处理任意类型的异常。

main(List<String> args) {
  try {
    divide(10, 0);
  } on IntegerDivisionByZeroException {
    print('Division by zero.');
  } catch (e) {
    print(e);
  }
}
 
divide(int a, int b) {
  if (b == 0) {
    throw new Exception('Some other exception.');
  }
  return a / b;
}

Finally
dart也提供了finally块,即是否发生异常这个块都会执行。

main(List<String> args) {
  try {
    divide(10, 0);
  } on IntegerDivisionByZeroException {
    print('Division by zero.');
  } catch (e) {
    print(e);
  } finally {
    print('I will always be executed!');
  }
}
 
divide(int a, int b) {
  if (b == 0) {
    throw new Exception('Some other exception.');
  }
  return a / b;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。