如果关心具体异常,针对不同异常进行不同处理,可以使用try...on处理异常,finally是可选的,用于最后的处理。

    1. try {
    2. // 使除数为0
    3. print(11 ~/ 0);
    4. } on IntegerDivisionByZeroException {
    5. print("除数为0");
    6. } on Exception {
    7. print("Exception");
    8. } finally {
    9. print("finally");
    10. }

    不关心具体异常,只想捕获,避免异常继续传递,则可以使用try...catch处理

    1. try {
    2. print(11 ~/ 0);
    3. } catch (e) {
    4. // 打印报错信息
    5. print(e);
    6. } finally {
    7. print("finally");
    8. }

    如果想获取更多异常信息,可以使用两个参数的catch,第二个参数是异常的调用栈信息

    1. try {
    2. print(11~/0);
    3. } catch(e,s){
    4. print(s);
    5. }

    如果你既想针对不同异常进行不同处理,还想打印调用栈信息,那就将两种结合起来使用

    1. try {
    2. print(11 ~/ 0);
    3. } on IntegerDivisionByZeroException catch (e, s) {
    4. print(s);
    5. } on Exception catch (e, s) {
    6. print(s);
    7. }