Fork me on GitHub

Dart学习笔记 - 异常

Exceptions(异常)

Dart 有两种异常类型: ExceptionError,以及一些子类型。可以自定义异常类型,通过继承ExceptionError这两个类。

Throw 抛出

下面是抛出一个异常的示例:

throw new FormatException('Expected at least 1 section');

还可以抛出任意的对象

throw 'error';

Catch

捕获异常可以避免异常继续传递。通过on 可以捕获指定的异常,通过 catch(e)获取异常对象。catch()可以带两个参数,第一个是抛出的异常对象,第二个为堆栈信息(StackTrace

try {
    temp();
} on MyError {
    print('catch MyError');
} on Exception catch (e) {
    print('Exception');
} catch (e) {
    print(e);
}

使用rethrow 可以把捕获的异常重新抛出。

void temp() {
    try {
        throw 'error';
    } catch (e) {
        print(e);
        rethrow;
    }
}
main(List<String> args) {
    try {
       temp();
    } catch (e) {
        print(e);
    }
}

Finally

不管有没有异常,都将会执行 finally 的方法。如果有 catch 捕获则先执行 catch 内的方法。finally 不会阻断异常的传递,如果没有catch异常依旧会往外层传递。

注:finally 需放在 catch 之后

try {} finally {
    print('finally');
}
try {
    throw 'error';
} catch (e) {
    print('catch');
} finally {
    print('finally');
}