美文网首页
Dart 异常

Dart 异常

作者: Abner_XuanYuan | 来源:发表于2023-08-09 10:02 被阅读0次

    1、简介

    Dart 代码可以抛出异常和捕获异常。异常表示一些未知的错误情况。如果异常没有被捕获,则异常会抛出,导致抛出异常的代码终止执行。
    Dart 中的所有异常是非检查异常。方法不会声明它们抛出的异常,也不要求捕获任何异常。
    Dart 提供了 Exception、Error 以及一些子类型,也可以定义自己的异常类型。此外 Dart 程序可以抛出任何非 null 对象,不仅限 Exception 和 Error 对象。

    2、异常处理

    1、throw
    /// 抛出类型
    throw FormatException('Expected at least 1 section’);
    /// 抛出任意对象
    throw 'Out of llamas!’;
    
    2、catch

    捕获异常可以避免异常继续传递(除非重新抛出( rethrow )异常)。可以通过捕获异常的机会来处理该异常。

    示例一:
    try {
    
    } catch (e) {
    
    }
    
    示例二
    try {
      
    } on OutOfLlamasException {
      // 一个特殊的异常
    } on Exception catch (e) {
      // 其他任何异常
    } catch (e) {
      // 没有指定的类型,处理所有异常
    }
    

    注:捕获语句中可以同时使用 oncatch ,也可以单独分开使用。使用 on 来指定异常类型,使用 catch 来 捕获异常对象。

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

    注:catch() 函数可以指定1到2个参数,第一个参数为抛出的异常对象,第二个为堆栈信息 ( 一个 StackTrace 对象 )。

    示例四
    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.
      }
    }
    
    void main() {
      try {
        misbehave();
      } catch (e) {
        print('main() finished handling ${e.runtimeType}.');
      }
    }
    

    注:如果仅需要部分处理异常,那么可以使用关键字 rethrow 将异常重新抛出。

    3、finally

    不管是否抛出异常,finally 中的代码都会被执行。如果 catch 没有匹配到异常,异常会在 finally 执行完成后,再次被抛出。

    try {
      
    } finally {
      //无论是否有异常,都会执行
    }
    
    try{
    
    }catch(e){
    
    }finally{
    
    }
    

    相关文章

      网友评论

          本文标题:Dart 异常

          本文链接:https://www.haomeiwen.com/subject/qfhwpdtx.html