Dart: Error Handling

 14th December 2020 at 9:20am

Dart 的错误处理。

Dart 提供了 Exception and Error 两种基础类型来表达错误。它们各自有很多预设的子类型。

抛出一个异常:

throw FormatException("wrong format");

箭头(=>)形式的函数,也可以使用 throw 表达式。

void distanceTo(Point other) => throw UnimplementedError();

Dart 可以抛出任何类型的异常,但一般来说会抛出 Exception 类或者 Error 类及它们的子类。

处理多种异常:

try {
  breedMoreLlamas();
} on OutOfLlamasException {
  // A specific exception
  buyMoreLlamas();
} on Exception catch (e) {
  // Anything else that is an exception
  print('Unknown exception: $e');
} catch (e) {
  // No specified type, handles all
  print('Something really unknown: $e');
}

on 指出处理什么类型的异常(不带 on 时处理所有类型);catch 用来捕捉被 throw 的对象。

捕捉 StackTrace:

try {
  // ···
} on Exception catch (e) {
  print('Exception details:\n $e');
} catch (e, s) {
  print('Exception details:\n $e');
  print('Stack trace:\n $s');
}

重新抛出异常:

void misbehave() {
  try {
    dynamic foo = true;
    print(foo++); // Runtime error
  } catch (e) {
    print('misbehave() partially handled ${e.runtimeType}.');
    rethrow; // Allow callers to see the exception.
  }
}